0

我已经开发了一个带有 TabGroupActivity 的 android 应用程序(例如,参见这个),除了 Facebook 和 Twitter 等社交网络集成之外,一切都运行良好。

此错误在此处此处此处之前记录在 Stackoverflow 中

java.lang.RuntimeException: Unable to resume activity {com.xxxx.xxxxx/com.facebook.LoginActivity}: com.facebook.FacebookException: Cannot call LoginActivity with a null calling package. This can occur if the launchMode of the caller is singleInstance.

07-29 18:22:55.757: E/AndroidRuntime(2342): Caused by: com.facebook.FacebookException: Cannot call LoginActivity with a null calling package. This can occur if the launchMode of the caller is singleInstance.

PS:在实施 TabGroupActivity 之前一切正常

更新1:在清单文件中,我将代码更新如下:

 <activity
        android:name="com.facebook.LoginActivity"
        android:label="@string/com_facebook_loginview_log_in_button"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:launchMode="singleTask"  />

但异常仍然给出:the launchMode of the caller is singleInstance

为什么这样..??

更新 2:现在我在 Facebook SDK 的 LoginActivity 中保持调试点。对于getCallingPackage(),我得到Null

String callingPackage = getCallingPackage();//Always Null


BackTracing it: On the Calling Activity (FacebookShare.java), I always get data as null instead of some values.

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
        //Toast.makeText(FacebookShareActivity.this, "onActivityResult", Toast.LENGTH_SHORT).show();
    }

谁能解释这种行为..??几天以来,我一直坚持这一点。

4

3 回答 3

2

粘贴此代码。它正在处理安装在您手机中的那些应用程序。

 void share(String nameApp, String imagePath) {
            try
            {
                List<Intent> targetedShareIntents = new ArrayList<Intent>();
                Intent share = new Intent(android.content.Intent.ACTION_SEND);
                share.setType("image/jpeg");
                List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0);
                if (!resInfo.isEmpty()){
                    for (ResolveInfo info : resInfo) {
                        Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);
                        targetedShare.setType("image/jpeg"); // put here your mime type
                        if (info.activityInfo.packageName.toLowerCase().contains(nameApp) || info.activityInfo.name.toLowerCase().contains(nameApp)) {
                            targetedShare.putExtra(Intent.EXTRA_SUBJECT, "Sample Photo");
                         targetedShare.putExtra(Intent.EXTRA_TEXT,"This photo is created by App Name");
                            targetedShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath)) );
                            targetedShare.setPackage(info.activityInfo.packageName);
                            targetedShareIntents.add(targetedShare);
                        }
                    }
                    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
                    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
                    startActivity(chooserIntent);
                }
            }
            catch(Exception e){
                 Log.v("VM","Exception while sending image on" + nameApp + " "+  e.getMessage());
             }
            }
于 2013-07-29T11:11:28.990 回答
1

上次我遇到这个错误,是因为我用错误的参数启动了 facebook 的 LoginActivity,使用这部分 xml:

<activity
        android:name="com.facebook.LoginActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

当我使用 launchMode singleInstance (或类似的东西)启动 LoginActivity 时,我遇到了这个错误。看一下这个。

编辑:我还有一个想法......当您尝试调用 facebook 传递上下文而不是本地活动(选项卡中的一个)时,但尝试传递父活动的上下文(它将是 TagGroupActivity)。

于 2013-07-29T10:33:31.910 回答
0
<activity
  android:name="xx.yy.YourActivity"
  android:launchMode="singleTask"
/>

(尝试使用 singleTask 而不是 singleInstance)我过去也遇到过同样的问题,但我重新检查了清单,但在那里找不到任何启动模式。

于 2013-07-29T11:03:43.040 回答