某些时候你想要知道某个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> resolveInfo = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);  if (resolveInfo.size() > 0) {  return true;  }  return false;
}

干货

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

<intent-filter>  <action android:name="android.intent.action.MAIN" />  <category android:name="android.intent.category.LAUNCHER" />
</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<ResolveInfo> 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://www.cnblogs.com/yydcdut/p/4287077.html,如需转载请自行联系原作者

Android -- queryIntentActivities相关推荐

  1. exported android,Android activity exported属性理解

    背景 这么久了,我自己看来对此属性的理解有点小偏差,当然不是表面上的理解误差,而是涉及到具体实现的细节.这里先贴下官方关于此属性的解释: android:exported This element s ...

  2. android默认exported_Android activity exported属性理解

    背景 这么久了,我自己看来对此属性的理解有点小偏差,当然不是表面上的理解误差,而是涉及到具体实现的细节.这里先贴下官方关于此属性的解释: android:exported This element s ...

  3. Android源码分析-PackageManagerService(PMS)源码分析(三)- queryIntentActivities函数来查找activity

    queryIntentActivities函数的作用: 在Android应用程序开发中,用startActivity可以开启另外一个Activity或应用.startActivity函数必须包含Int ...

  4. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

  5. [高级]android应用开发之intent的妙用二

    相信做android应用开发的朋友对intent组件都已经是相当熟悉了,这里鄙人总结一下intent的妙用,希望对大家有帮助. intent妙用之列出所有已安装的应用程序列表 装载:http://bl ...

  6. Java中intentfiler_【Android - 组件】之IntentFilter的匹配规则

    我们知道,Activity的启动模式分为两种,分别是显式启动和隐式启动.显式启动需要明确的指定被启动的对象的组件信息,包括包名和类名:而隐式启动需要 Intent 能够匹配目标组件的 IntentFi ...

  7. android 7.0拷贝文件,Android 7.0应用间共享文件----FileProvider

    应用间经常需要将自己的私有文件共享给其他的app,如某应用想要共享图库的图片用来编辑用户的头像,或者文件管理app允许用户在不同目录下复制粘贴文件等等,但为了保护私有文件的安全性,在targetSdk ...

  8. com.android.phone已停止 vivo,oppo,vivo应用程序终止通知不在android fcm中出...

    Infinix Note 5 (Android One- Oreo) and Oppo F9(Oreo) are not getting push notification if app is kil ...

  9. android跳转应用市场搜索,Android 应用中跳转到应用市场评分

    在开发Android App过程中,经常会遇见这样的功能.从当前的app跳转到一个应用商店并且跳转到自己app的详情页面,让用户给自己的App进行评分.评价,从而提高自己App的排名.下面介绍三种方法 ...

最新文章

  1. 在Kubernetes集群上部署高可用Harbor镜像仓库
  2. 【Netty】NIO 选择器 ( Selector ) 通道 ( Channel ) 缓冲区 ( Buffer ) 网络通信案例
  3. 表的插入、更新、删除、合并操作_7_通过视图插入
  4. 从零写一个编译器(十一):代码生成之Java字节码基础
  5. 16个烧光你脑细胞的悖论
  6. 从多级延迟触发器到边沿检测
  7. 谈谈我国电子商务中的安全问题
  8. U盘容量显示错误修正
  9. ADB PC端和目标板的基本连接建立步骤和文件交换:
  10. vue可以编辑发布多长的视频_vue视频的总时长是多少
  11. 【实习生面试】阿里前端实习生一面流程及题目
  12. 深圳必去的50个免费景点 景色绝美
  13. win10计算机远程连接命令,详细教你win10设置远程桌面连接命令
  14. 数据库的数据保护:数据的安全性和完整性
  15. windows挂起进程方法介绍
  16. javascript_JSON.parse() 与 JSON.stringify()_ZHOU125disorder_
  17. 如何通过TotalControl系统设置,提高电脑操作手机速度(教程)
  18. 计算机默认桌面位置,怎么更改电脑桌面存储位置?
  19. Django-APIView
  20. 计算机一级access教程,计算机一级考试Access傻瓜教程.doc

热门文章

  1. 运动目标跟踪__kalman
  2. WIN32 C++ 遍历文件夹
  3. joc杂志影响因子2019_2019年放射学领域SCI主要杂志影响因子汇总
  4. SQL基础学习总结:1(数据库)
  5. ubuntu 设置开机执行脚本_ubuntu-18.04 设置开机启动脚本
  6. Java项目:电商书城平台系统设计和实现(java+springboot+mysql+spring+jsp)
  7. 数据库和服务器什么协议,数据库服务器协议
  8. nodejs 根据坐标 标记图片上的姓名列
  9. ssm 实现房屋租赁系统
  10. 八皇后的一个回溯递归解法