博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android -- queryIntentActivities
阅读量:7255 次
发布时间:2019-06-29

本文共 3982 字,大约阅读时间需要 13 分钟。

某些时候你想要知道某个APP是否有注册了一个明确的intent,比如说你想要检查某个receiver是否存在,然后根据是否存在来这个receiver来在你的AP里面enable某些功能。我们可以通过PackageManager来check它。

code

public boolean isIntentAvailable(Context context, String action) {      final PackageManager packageManager = context.getPackageManager();      final Intent intent = new Intent(action);      List
resolveInfo = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (resolveInfo.size() > 0) { return true; } return false; }

干货

一般APP的manifest里面要设置为launcher的activity总是要设置intent-filter:

可以通过queryIntentActivities来获得有哪些launcher:

private void loadApps() {                   Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);                   mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);                     mApps = getPackageManager().queryIntentActivities(mainIntent, 0);           }

我们可以在自己的app上用一个gridview显示出当前手机有哪些app:

import java.util.List;       import android.app.Activity;   import android.content.Intent;   import android.content.pm.ResolveInfo;   import android.os.Bundle;   import android.view.View;   import android.view.ViewGroup;   import android.widget.BaseAdapter;   import android.widget.GridView;   import android.widget.ImageView;       public class MyHome extends Activity   {             GridView mGrid;                      @Override       public void onCreate(Bundle savedInstanceState) {                   super.onCreate(savedInstanceState);                             loadApps();                   setContentView(R.layout.main);                   mGrid = (GridView) findViewById(R.id.apps_list);                   mGrid.setAdapter(new AppsAdapter());           }                       private List
mApps; private void loadApps() { Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); mApps = getPackageManager().queryIntentActivities(mainIntent, 0); } public class AppsAdapter extends BaseAdapter { public AppsAdapter() { } public View getView(int position, View convertView, ViewGroup parent) { ImageView i; if (convertView == null) { i = new ImageView(MyHome.this); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new GridView.LayoutParams(50, 50)); } else { i = (ImageView) convertView; } ResolveInfo info = mApps.get(position); i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); return i; } public final int getCount() { return mApps.size(); } public final Object getItem(int position) { return mApps.get(position); } public final long getItemId(int position) { return position; } } }

可以设置点击监听器去开启app:

@Override
public void onItemClick(AdapterView
parent, View view, int position,long id) { ResolveInfo info = mApps.get(position); //该应用的包名 String pkg = info.activityInfo.packageName; //应用的主activity类 String cls = info.activityInfo.name; ComponentName componet = new ComponentName(pkg, cls); Intent i = new Intent(); i.setComponent(componet); startActivity(i); }

我是天王盖地虎的分割线

转载地址:http://ojkdm.baihongyu.com/

你可能感兴趣的文章
sql语句
查看>>
log4j配置
查看>>
安装程序无法创建新的系统分区
查看>>
配置DNS服务器
查看>>
lock(3)——更新锁(U)、排它锁(X)、死锁及如何避免死锁
查看>>
使用SignalR 2 注意事项
查看>>
多进程 (一) — 像线程一样管理进程
查看>>
node+vue报错合辑
查看>>
Date——js 获取当前日期到之后一个月30天的日期区间
查看>>
RT-SA-2019-003 Cisco RV320 Unauthenticated Configuration Export
查看>>
Java线程练习
查看>>
Algs4-1.5.22Erods-renyi模型的倍率实验
查看>>
计算机硬件的组成、python的开发层面及语法介绍
查看>>
python面试知识点
查看>>
栅格布局
查看>>
Zimber 8.8.12卸载后重新安装报错解决办法
查看>>
Git 自救指南
查看>>
spring boot配置项目访问路径,配置拦截器,配置静态虚拟路径
查看>>
linux运维笔记
查看>>
Lake Counting (DFS)
查看>>