在一个应用中,点击按钮进入另一个应用。
先声明一个按钮:
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
//此处需要APK的包名和APK的类名
i.setComponent(new ComponentName(apkPackageName,apkActivityName));
startActivity(i);
//在进入另一个应用的同时,结束当前的应用,这样不致于让这个应用一直在后台运行
finish();
}
});
在这里需要获得需要启动的应用的包名和类名。
获得APK的包名:
/**
* 获取指定APK文件的PackageInfo
*
* @param context
* @param fileName
* @return
*/
public static PackageInfo getApkFileInfo(Context context, String fileName) {
//此处的fileName为APK所在地址的完整路径名+APK名
return context.getPackageManager().getPackageArchiveInfo(fileName,PackageManager.GET_META_DATA);
}
PackageInfo packageInfo = getApkFileInfo(this,apkcachePath);
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
String apkPackageName = applicationInfo.packageName;
// 获取应用的Activity名
PackageManager pm = getPackageManager();
PackageInfo info = null;
try {
info = getPackageManager().getPackageInfo( apkPackageName, 0);
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage(info.packageName);
List<ResolveInfo> apps = pm.queryIntentActivities(intent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String apkActivityName = ri.activityInfo.name;
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}