对象引用上的Intent.migrateExtraStreamToClipData()

时间:2016-06-26 17:31:49

标签: android android-intent android-support-library

开始在我的应用的生产版本中收到此错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference

实际上没有明确的界限,但我最近将支持库版本更改为24.0.0。这是完整的堆栈跟踪:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference
   at android.app.Instrumentation.execStartActivity(Instrumentation.java:1494)
   at android.app.Activity.startActivityForResult(Activity.java:3745)
   at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
   at android.app.Activity.startActivityForResult(Activity.java:3706)
   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871)
   at com.google.android.gms.common.internal.zzi$1.zztD(Unknown Source)
   at com.google.android.gms.common.internal.zzi.onClick(Unknown Source)
   at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5254)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

编辑:我还要注意,100%收到此错误的用户也是root用户。这也发生在23.4.0 ...我也有一个潜在的相关错误,它同时出现与Firebase相关的Base64.decode函数。

编辑2:前几天我从Android Dev获得了一些帮助。他们建议我更新我的项目的Google Play服务版本,到目前为止似乎已经有所帮助。我会再等几天才能从我的用户那里得到结果,但初始日志很有希望。

我之前使用的是9.0.2但我现在使用的是9.2.0。

编辑3:更新到9.2.0无法帮助崩溃。我仍然从root用户那里得到同样的错误。我注意到,遇到崩溃的用户低于Android 6.0,因此我将在现场设备上进行测试并尽快更新。

7 个答案:

答案 0 :(得分:11)

似乎在未安装Google Play服务的设备上发生错误,传递的意图将为null。

您可以通过覆盖Activity中的startActivityForResult方法来确保传递的intent不为null。

@Override    
public void startActivityForResult(Intent intent, int requestCode) {
    if (intent == null) {    
        intent = new Intent();        
    }       
    super.startActivityForResult(intent, requestCode);
}

答案 1 :(得分:4)

这个问题有点陈旧,但我只想分享一下它的更新。根据{{​​3}},问题应该在Google Play服务版9.4.0中解决。接受的答案也应该有效(作为中间补丁),但如果您更新Google Play服务库,则应解决此问题。

答案 2 :(得分:1)

以下代码适用于 Android 11(API 级别 30)或更高版本:

在 AndroidManifest.xml 中,

<queries>
        <package android:name="com.google.android.youtube" />
        <package android:name="com.example.app" />
</queries>

“如果您的应用面向 Android 11(API 级别 30)或更高版本,并且需要与自动可见应用以外的应用进行交互,请在应用的清单文件中添加该元素。在该元素中,通过以下方式指定其他应用包名。”

有关详细信息,请参阅 here

答案 3 :(得分:0)

那确实有用

@Override
public void startActivityForResult(Intent intent, int requestCode) {
    try {
        super.startActivityForResult(intent, requestCode);
    } catch (Exception ignored){}
}

答案 4 :(得分:0)

很可能是与getLaunchIntentForPackage is null for some apps中相同的问题。 并不是真正的重复项(因为OP无法跟踪违规行,这在链接问题中是已知的),但是如果有人遇到此问题,链接问题的解决方案可能会有所帮助。

答案 5 :(得分:0)

这实际上对我有用。

对于 Android 11(API 级别 30)或更高版本,在 AndroidManifest.xml 中,

<queries>
        <package android:name="com.google.android.youtube" />
        <package android:name="com.example.app" />
</queries>

“如果您的应用面向 Android 11(API 级别 30)或更高版本,并且需要与自动可见应用以外的应用进行交互,请在应用的清单文件中添加该元素。在该元素中,通过以下方式指定其他应用包名。”

有关详细信息,请参阅 here

答案 6 :(得分:0)

您可以直接使用 getLaunchIntentForPackage 打开应用程序并设置您的应用程序包

val intentApp = requireActivity().packageManager.getLaunchIntentForPackage("com.twitter.android")
        try {
            this.startActivity(intentApp)
        } catch (ex: ActivityNotFoundException) {
            Toast.makeText(this,getString(R.string.activity_no_app), Toast.LENGTH_LONG).show()
        }

这实际上对我有用。

但出于安全原因,Android 11(API 级别 30)将无法运行,要克服此解决方案,您需要在 AndroidManifes.xml

中指定应用程序包
<queries>
        <package android:name="com.google.android.youtube" />
        <package android:name="com.example.app" />
</queries>

快乐编码