List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
该方法用于知道Intent的匹配结果,返回的结果从最匹配到最不匹配,也就是说第一个item就是resolveActivity(Intent, int)返回的结果
可以利用这个实现查看当前手机上所有的APP的主方法信息(这样就能知道当前手机装了哪些APP)
然后可以利用当前手机上所有的APP主方法信息来启动任意手机上的任意APP
示例代码:打印手机所有应用的主Activity信息,然后发现116是知乎就设了一个按钮启动知乎
public class PlayActivity extends AppCompatActivity {
private static final String TAG = "PlayActivity";
private List<ResolveInfo> mApps;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play);
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
Log.i(TAG, "onCreate: "+mApps.size());
for (int i=0;i<mApps.size();i++){
Log.i(TAG, i+"onCreate: "+mApps.get(i).activityInfo.name+" "+mApps.get(i).activityInfo.packageName+" "+mApps.get(i).activityInfo.targetActivity);
Log.i(TAG, i+"onCreate: "+mApps.get(i).activityInfo.applicationInfo.name+" "+mApps.get(i).activityInfo.applicationInfo.packageName+" "+mApps.get(i).activityInfo.applicationInfo.className);
}
Button button=findViewById(R.id.button4);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ComponentName componet = new ComponentName(mApps.get(116).activityInfo.packageName, mApps.get(116).activityInfo.name);
Intent intent=new Intent();
intent.setComponent(componet);
startActivity(intent);
}
});
}
}