为什么Activity getIntent()。getExtras()有时会返回null?

时间:2019-05-31 19:48:02

标签: android

我有一个活动,在极少数情况下,其getIntent().getExtras()将返回null

public class NewNoteChecklistLauncherFragmentActivity extends AppCompatActivity {
    private static final String NEW_NOTE_CHECKLIST_LAUNCHER_FRAGMENT = "NEW_NOTE_CHECKLIST_LAUNCHER_FRAGMENT";

    private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.mAppWidgetId = getIntent().getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);

        FragmentManager fm = getSupportFragmentManager();
        NewNoteChecklistLauncherFragment newNoteChecklistLauncherFragment = (NewNoteChecklistLauncherFragment) fm.findFragmentByTag(NEW_NOTE_CHECKLIST_LAUNCHER_FRAGMENT);

        if (newNoteChecklistLauncherFragment == null) {
            Bundle bundle = this.getIntent().getExtras();
            if (bundle == null) {
                // WHY?
                throw new java.lang.RuntimeException();
            }

我不确定这是怎么发生的。每次,我都会通过调用Activity

来启动putExtra
Intent i = new Intent(context, NewNoteChecklistLauncherFragmentActivity.class);
Note note = new Note();
i.putExtra(NewNoteChecklistLauncherFragment.INTENT_EXTRA_NOTE, note);

同时,它还充当“共享”操作的意图过滤器。

<activity android:name="com.yocto.wenote.note.NewNoteChecklistLauncherFragmentActivity"
    android:theme="@style/Theme.Transparent"
    android:windowSoftInputMode="stateAlwaysHidden" >
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>

    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>

    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

我无法产生这样的问题。但是,有时我会在生产中看到这种情况。

任何想法,在上述情况下,getIntent().getExtras()将返回null

1 个答案:

答案 0 :(得分:3)

这可能是错误的ACTION_SEND实现,无法附加任何附加功能。这可能是一些自动化脚本(或脚本小子),无需任何额外费用即可手动调用您的活动。

由于活动已导出,因此我建议您进行一些“防御性编程”。不要假定存在额外Bundle。相反,在这种情况下,请尽可能“优雅地降级”。