【问题标题】:Permission Denial for intent to external activity拒绝外部活动的意图
【发布时间】:2011-05-06 04:50:00
【问题描述】:

我的整个想法有点复杂,但只是为了把事情分解,这样它们就很简单了……我在一个小部件上有一个按钮,我需要在官方脸书应用。

这是我正在使用的代码:

 Intent PlacesIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.facebook.katana", "com.facebook.katana.activity.places.PlacesNearbyActivity"));
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, PlacesIntent, 0);
            views.setOnClickPendingIntent(R.id.places, pendingIntent);

我在 logcat 中收到此错误:

 11-06 22:26:48.117: WARN/ActivityManager(85): Permission denied: checkComponentPermission() reqUid=10055
    11-06 22:26:48.117: WARN/ActivityManager(85): Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.facebook.katana/.activity.places.PlacesNearbyActivity bnds=[371,129][428,203] } from null (pid=-1, uid=10157) requires null
    11-06 22:26:48.127: WARN/ActivityManager(85): Unable to send startActivity intent
    11-06 22:26:48.127: WARN/ActivityManager(85): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.facebook.katana/.activity.places.PlacesNearbyActivity bnds=[371,129][428,203] } from null (pid=-1, uid=10157) requires null
    11-06 22:26:48.127: WARN/ActivityManager(85):     at com.android.server.am.ActivityManagerService.startActivityLocked(ActivityManagerService.java:3223)
    11-06 22:26:48.127: WARN/ActivityManager(85):     at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:3980)
    11-06 22:26:48.127: WARN/ActivityManager(85):     at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:212)
    11-06 22:26:48.127: WARN/ActivityManager(85):     at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:3843)
    11-06 22:26:48.127: WARN/ActivityManager(85):     at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:210)
    11-06 22:26:48.127: WARN/ActivityManager(85):     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1480)
    11-06 22:26:48.127: WARN/ActivityManager(85):     at android.os.Binder.execTransact(Binder.java:288)
    11-06 22:26:48.127: WARN/ActivityManager(85):     at dalvik.system.NativeStart.run(Native Method)

如果我使用,

Intent PlacesIntent1 = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.facebook.katana", "com.facebook.katana.HomeActivity"));
            PendingIntent pendingIntent1 = PendingIntent.getActivity(context, 0, PlacesIntent1, 0);
            views.setOnClickPendingIntent(R.id.facebook, pendingIntent1);

一切都很好,它打开了家庭活动,但这并不是我真正想要做的。

我试过了

com.facebook.katana.activity.places.PlacesNearbyActivity - I actually see a respons in the logcat about the denail with this one
com.facebook.katana.activity.PlacesNearbyActivity
com.facebook.katana.places.PlacesNearbyActivity
com.facebook.katana.PlacesNearbyActivity

其他人什么都没有发生

以下是我在手机上手动打开活动时在 logcat 中看到的内容:

11-06 20:20:38.295: INFO/ActivityManager(85): Starting activity: Intent { cmp=com.facebook.katana/.activity.places.PlacesNearbyActivity }

11-06 22:03:28.027: INFO/ActivityManager(85): Starting activity: Intent { flg=0x4000000 cmp=com.facebook.katana/.HomeActivity }

所以,这让你知道我是如何获得我的信息的。

【问题讨论】:

    标签: java android components android-widget android-intent


    【解决方案1】:

    我在一个小部件上有一个按钮,我需要在官方 Facebook 应用程序中打开“地点”活动。

    由于 Facebook 似乎不支持以这种方式与其 Android 应用程序集成,因此请不要这样做。

    Permission denied: checkComponentPermission() reqUid=10055
    

    该活动只能由 Facebook 发起。

    【讨论】:

      【解决方案2】:

      我不同意 CommonsWare 的回答。答案也完全不被接受,虽然我曾经认为答案是正确的,然后我尝试了以下代码,发现您可以使用以下代码从另一个应用程序打开 place Activity...

      appAction = Intent.ACTION_VIEW;
      appPackage = "com.facebook.katana";
      appActivity = "com.facebook.katana.IntentUriHandler";
      
      data = Uri.parse("facebook:/places").buildUpon().appendQueryParameter("user", Long.toString(post.getSourceId())).appendQueryParameter("post", post.getPostId()).build();
      
      Intent intent = new Intent(appAction);
      intent.setClassName(appPackage, appActivity);
      
      intent.setData(data);
      ctx.startActivity(intent);
      

      【讨论】:

        猜你喜欢
        • 2011-05-05
        • 2011-05-08
        • 2012-04-28
        • 2012-02-24
        • 2013-11-18
        • 1970-01-01
        • 2011-03-22
        • 2019-09-11
        相关资源
        最近更新 更多