好吧,这是@ρяσѕρєя K 的修改答案,因为
它在三星手机中运行良好,只有包裹有“calc”,但并非所有手机都像 HTC 和 LENOVO ETC
对于 Api >= 15 ,您可以使用 BUT !!!
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_CALCULATOR);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这可能会导致这样的错误
android.content.ActivityNotFoundException:没有找到处理 Intent 的活动 { act=android.intent.action.MAIN cat=[android.intent.category.APP_CALCULATOR] flg=0x10000000 }
让我们来看看这个
将所有应用加载到阵列
// Declare universal if you want Access any where from scope
ArrayList<HashMap<String,Object>> items;
PackageManager pm ;
List<PackageInfo> packs;
// initialise From Oncreate if you want
items =new ArrayList<HashMap<String,Object>>();
pm = getPackageManager();
packs = pm.getInstalledPackages(0);
for (PackageInfo pi : packs)
{
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("appName", pi.applicationInfo.loadLabel(pm));
map.put("packageName", pi.packageName);
items.add(map);
}
这是技巧部分
我们正在遍历所有应用程序以获取应用程序名称或匹配“计算器”
public void opencalculator(){
int d=0;
if(items.size()>=1){
int j=0;
for(j=0;j<items.size();j++){
String AppName = (String) items.get(j).get("appName");
// Log.w("Name",""+AppName);
if(AppName.matches("Calculator"))
{
d=j;
break;
}
}
String packageName = (String) items.get(d).get("packageName");
Intent i = pm.getLaunchIntentForPackage(packageName);
if (i != null){
Toast.makeText(getContext(),"STARTING",Toast.LENGTH_SHORT).show();
startActivity(i);}
else {
Toast.makeText(getContext(),"SORRY I CANT OPEN CALCULATOR :(",Toast.LENGTH_SHORT).show();
}
}
else{
Toast.makeText(getContext(),"SORRY I CANT START CALCULATOR :(",Toast.LENGTH_SHORT).show();
}
}
呼叫计算器
opencalculator();