某些时候你想要知道某个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);
}

我是天王盖地虎的分割线

最新文章

  1. 安装centOS分区的图解记录
  2. Linux常用指令---定时任务
  3. Azure Websites Migration Assistant
  4. sort()排序
  5. mysqldump: command not found问题解决
  6. python(abi) RPM DEB Download
  7. php学习之道:php中soap的使用实例以及生成WSDL文件,提供自己主动生成WSDL文件的类库——SoapDiscovery.class.php类
  8. Weex-进阶笔记二
  9. 【Java】Objects 源码学习
  10. Pytorch学习笔记(二)---- 神经网络搭建
  11. jq点击事件未生效
  12. docker学习笔记(2)
  13. Spring mybatis源码篇章-MapperScannerConfigurer关联dao接口
  14. ansible 自动化管理
  15. Service discovery
  16. Dapper的基本使用,Insert、Update、Select、Delete
  17. Java 正则表达式详细使用
  18. Django高级篇一RESTful架构及API设计
  19. 【Struts2】如何查看Struts2框架的源码
  20. External RNA Controls Consortium (ERCC)

热门文章

  1. Javascript 严格模式use strict详解
  2. javascript 正则限制文本输入框只允许输入数字,简单实现。
  3. OpenVPN的ipp.txt为空不生效的问题
  4. 网速4M等于多少KB/S,等于多少kbps
  5. 最近5年183个Java面试问题列表及答案[最全]
  6. 自己动手实现一个MVVM库
  7. 选股:“均线是水,K线是舟,量是马达!”的选美理念!
  8. 解决xib布局方式支持ios6,ios7
  9. CCBAnimationManager
  10. 清除和新建WordPress数据库