zcydanzcy 2016-08-17 01:10 采纳率: 100%
浏览 3729
已采纳

从一个APP打开别人的APP ,提示 not exported from uid

注意:我是用自己的APP打开**别人的APP**。我遇到的问题是自己的APP不能打开手机里面已经装好的QQ阅读。我不能修改QQ阅读的任何代码,所以"exported ="true"“可能不适用于我这个情况。在此感谢所有愿意为我这个问题花时间的大大。

下面是错误提示:**Permission Denial**: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qq.reader/.widget.picbrowser.PictureActivity } from ProcessRecord{3823559b 16851:com.pax.market.android.app/u0a322} (pid=16851, uid=10322) **not exported from uid **10324

下面是我启动别人APP的代码

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 apps = pManager.queryIntentActivities(
        resolveIntent, 0);

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 (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();
}
}         
  • 写回答

1条回答 默认 最新

  • FFZ2009 2016-08-17 02:25
    关注

    List apps = pManager.queryIntentActivities(resolveIntent, 0);查询出的符合条件的activity是有可能是多个的。
    对于com.qq.reader来说可查询出两个:
    com.qq.reader.widget.picbrowser.PictureActivity
    com.qq.reader.activity.SplashActivity
    其中PictureActivity是不能被启动的,因为它的exported=false,但是SplashActivity是可以启动的。
    代码修改了一下,是可以启动qqreader的,是从SpalshActivity启动的。

    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();
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: