Android 权限拒绝:未从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

当我从自己的应用程序中打开一个已经安装在手机中的应用程序时,我遇到了这个问题

权限拒绝:正在启动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导出


`列出应用程序=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();
}