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 }

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

      

          

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

      

      

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

     

  • 相关阅读:
    GDOI 2019 退役记
    SHOI2019 游记
    【WC2014】紫荆花之恋
    PKUWC 2019 & NOIWC2019 比赛总结 Formal Version
    WC 2019 颓废记
    VDUVyRLYJC
    Git学习
    DOM学习笔记
    python基础---->AJAX的学习
    python基础---->进程、线程及相关等
  • 原文地址:https://www.cnblogs.com/shang53880/p/2159555.html
Copyright © 2011-2022 走看看