我正在寻找使用PackageManager
拨打第三方应用的可能性。主要问题是,我的方法callApp
实现了另一个无法访问的解决方案的接口。我只收到参数appName
没有包信息。
初始化Intent
时,我必须手动添加我的packagepath(此处为:com.example)。
我想实现,Android会找到与该名称匹配的包的全名。因为此方法是另一个项目的一部分,所以我不能使用getApplicationContext().getPackageName();
或类似的方法。有什么想法吗?
public void callApp(int methodIndicator, String appName, String command, Map<String, String> args) {
PackageManager pm = context.getPackageManager();
// < Should only be the name
Intent launchIntent = pm.getLaunchIntentForPackage("com.example."+appName);
launchIntent.putExtra("method", methodIndicator);
launchIntent.putExtra("command", command);
launchIntent.putExtra("args", new HashMap<String, String>(args));
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(launchIntent);
}
答案 0 :(得分:2)
您可以迭代并尝试像这样获取appNam。
final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
if(applicationInfo.loadLabel(pm).toString().equalsIgnoreCase(appName){
string packageName = packageInfo.packageName;
}
Log.d(TAG, "Installed package :" + packageInfo.packageName);
Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName));
}
// the getLaunchIntentForPackage returns an intent that you can use with startActivity()
答案 1 :(得分:1)
要获取设备上已安装应用的列表,您可以使用以下代码:
PackageManager pm = context.getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> pgList = pm.queryIntentActivities(mainIntent, 0);
for (ResolveInfo rInfo : pgList) {
// do your stuff
}
ResolveInfo对象通过以下访问器提供对名称和包的访问:
rInfo.activityInfo.packageName // the application package
rInfo.activityInfo.loadLabel(pm).toString() // the application name as displayed in launcher
从那里你可以找到你的appName并获得相关的包。
希望有所帮助。