zoukankan      html  css  js  c++  java
  • 获取系统中应用程序的另一种方式

      上次说到了从package中获取manifest中已经注册的应用,然后作为数据传送到ListView上显示。其实系统中有一个类,只需要继承这个类,然后重写一个方法就同样可以实现了,这个类就是LauncherActivity,看一下LauncherActivity里面的代码:也是从package中拿到的:

      

     1   @Override
    2 protected void onCreate(Bundle icicle) {
    3 super.onCreate(icicle);
    4
    5 mPackageManager = getPackageManager();
    6
    7 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    8 setProgressBarIndeterminateVisibility(true);
    9 onSetContentView();
    10
    11 mIconResizer = new IconResizer();
    12
    13 mIntent = new Intent(getTargetIntent());
    14 mIntent.setComponent(null);
    15 mAdapter = new ActivityAdapter(mIconResizer);
    16
    17 setListAdapter(mAdapter);
    18 getListView().setTextFilterEnabled(true);
    19
    20 setProgressBarIndeterminateVisibility(false);
    21 }

     我们可以看到mIntent = new Intent(getTargetIntent()); 那我们就看看是怎么拿到Intent的:

      

    1 /**
    2 * Get the base intent to use when running
    3 * {@link PackageManager#queryIntentActivities(Intent, int)}.
    4 */
    5 protected Intent getTargetIntent() {
    6 return new Intent();
    7 }

     它只是返回了一个Intent的对象而已,并没用设置它的action和category之类的,那我们就需要重写这个方法,然后设置它的action和category:

    1 @Override
    2 protected Intent getTargetIntent () {
    3 Intent intent = new Intent();
    4 intent.setAction(Intent.ACTION_MAIN);
    5 intent.addCategory(Intent.CATEGORY_LAUNCHER);
    6 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    7 return intent;
    8 }

      完了之后运行,我们可以看到效果了:

      

          

      随便点一个进去看看有没用点击事件:

      

      

      有点击事情,很好,跟上次实现的功能一样,但明显这个更简洁,用起来更方便。。。

     

  • 相关阅读:
    HTML <input> 标签
    HTML5 <input> type 属性
    静态页面与动态页面
    string::size_type 页73 size_t 页90
    template method(模板方法)
    C++中创建对象的时候加括号和不加括号的区别(转)
    _declspec(dllexport)和.def(转)
    智能指针
    C++中的delete加深认识
    工厂方法(整理自李建忠<C++设计模式>视频)
  • 原文地址:https://www.cnblogs.com/shang53880/p/2159555.html
Copyright © 2011-2022 走看看