Android 权限拒绝:未从uid导出启动意图
当我从自己的应用程序中打开一个已经安装在手机中的应用程序时,我遇到了这个问题 权限拒绝:正在启动Intent{act=android.Intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qq.reader/.widget.picbrowser.PictureActivity}来自 ProcessRecord{3823559B16851:com.pax.market.android.app/u0a322} (pid=16851,uid=10322)未从uid导出Android 权限拒绝:未从uid导出启动意图,android,Android,当我从自己的应用程序中打开一个已经安装在手机中的应用程序时,我遇到了这个问题 权限拒绝:正在启动Intent{act=android.Intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qq.reader/.widget.picbrowser.PictureActivity}来自 ProcessRecord{3823559B16851:com.pax.market.android.app/u0a322} (pid=1
`列出应用程序=pManager.queryInputActivities(resolveIntent,0); 将找到多个活动 例如:appName:QQReader,packagename:com.qq.reader 您将发现两项活动: com.qq.reader.widget.picbrowser.PictureActivity com.qq.reader.activity.SplashActivity PictureActivity无法启动,因为它的Export=false,所以可以启动SplashActivity 代码修改如下:
public static void openApp(Activity activity,String packageName) {
PackageInfo pi;
try {
pi = activity.getPackageManager().getPackageInfo(packageName, 0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.setPackage(pi.packageName);
PackageManager pManager = activity.getPackageManager();
List<ResolveInfo> apps = pManager.queryIntentActivities(
resolveIntent, 0);
for(ResolveInfo app: apps){
Log.d(TAG,String.format("%s %s",app.activityInfo.packageName,app.activityInfo.name));
packageName = app.activityInfo.packageName;
String className = app.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
try {
activity.startActivity(intent);
}catch(SecurityException e){
e.printStackTrace();
}
}
/* ResolveInfo ri = (ResolveInfo) apps.iterator().next();
if (ri != null) {
packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
activity.startActivity(intent);
}*/
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Package Name not found: " + e.getMessage() + ", App is not installed.");
} catch (SecurityException e){
SnackBar.newBuilder().activity(activity).
text(activity.getString(R.string.permission_denied_to_open))
.build().show();
}
publicstaticvoidopenapp(Activity-Activity,stringpackagename){
PackageInfo-pi;
试一试{
pi=activity.getPackageManager().getPackageInfo(packageName,0);
意向解析意向=新意向(Intent.ACTION\u MAIN,空);
resolveIntent.setPackage(pi.packageName);
PackageManager pManager=activity.getPackageManager();
列表应用程序=pManager.querytentActivities(
目的性,0);
用于(ResolveInfo应用程序:应用程序){
Log.d(标记,字符串.格式(“%s%s”,app.activityInfo.packageName,app.activityInfo.name));
packageName=app.activityInfo.packageName;
字符串className=app.activityInfo.name;
意向意向=新意向(意向.行动\主要);
intent.addCategory(intent.CATEGORY_启动器);
ComponentName cn=新组件名(packageName,className);
意图.设定成分(cn);
试一试{
活动。开始触觉(意图);
}捕获(安全异常e){
e、 printStackTrace();
}
}
/*ResolveInfo ri=(ResolveInfo)apps.iterator().next();
如果(ri!=null){
packageName=ri.activityInfo.packageName;
字符串className=ri.activityInfo.name;
意向意向=新意向(意向.行动\主要);
intent.addCategory(intent.CATEGORY_启动器);
ComponentName cn=新组件名(packageName,className);
意图.设定成分(cn);
活动。开始触觉(意图);
}*/
}捕获(PackageManager.NameNotFounde异常){
Log.e(标记“未找到包名:”+e.getMessage()+”,未安装应用程序);
}捕获(安全异常e){
SnackBar.newBuilder()活动(活动)。
文本(activity.getString(R.string.permission\u denied\u to\u open))
.build().show();
}
}在我的情况下,我从应用程序A打开应用程序B。我无法在应用程序B中编辑清单
public static void openApp(Activity activity,String packageName) {
PackageInfo pi;
try {
pi = activity.getPackageManager().getPackageInfo(packageName, 0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.setPackage(pi.packageName);
PackageManager pManager = activity.getPackageManager();
List<ResolveInfo> apps = pManager.queryIntentActivities(
resolveIntent, 0);
for(ResolveInfo app: apps){
Log.d(TAG,String.format("%s %s",app.activityInfo.packageName,app.activityInfo.name));
packageName = app.activityInfo.packageName;
String className = app.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
try {
activity.startActivity(intent);
}catch(SecurityException e){
e.printStackTrace();
}
}
/* ResolveInfo ri = (ResolveInfo) apps.iterator().next();
if (ri != null) {
packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
activity.startActivity(intent);
}*/
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Package Name not found: " + e.getMessage() + ", App is not installed.");
} catch (SecurityException e){
SnackBar.newBuilder().activity(activity).
text(activity.getString(R.string.permission_denied_to_open))
.build().show();
}