• 获取系统中应用程序的另一种方式


      上次说到了从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 }

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

      

          

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

      

      

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

     

  • 相关阅读:
    需求规格说明书
    需求规格说明书模板0.2版本
    需求规格说明书模板0.1版本
    万事开头难,团队一起盘!!
    工程开始了!(2019-03-04)
    SpringBoot RESTful API返回统一数据格式还不懂?
    Springboot读取配置文件中的属性
    java本地缓存的使用
    解决github访问不了和慢的问题2021-06-27
    Oracle DDL
  • 原文地址:https://www.cnblogs.com/shang53880/p/2159555.html
Copyright © 2020-2023  润新知