我有一个活动,在极少数情况下,其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
?
答案 0 :(得分:3)
这可能是错误的ACTION_SEND
实现,无法附加任何附加功能。这可能是一些自动化脚本(或脚本小子),无需任何额外费用即可手动调用您的活动。
由于活动已导出,因此我建议您进行一些“防御性编程”。不要假定存在额外Bundle
。相反,在这种情况下,请尽可能“优雅地降级”。