Мое основное действие проверяет, запускает ли пользователь приложение в методе onCreate впервые. В диалоговом окне, представляющем собой WebView, есть гиперссылка для отправки мне электронной почты. Когда пользователь нажимает на ссылку, я получаю следующее исключение:
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:651)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:258)
at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:235)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:330)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4717)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Действие, вызывающее исключение, устанавливается в файле манифеста следующим образом:
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent android:action="android.intent.action.VIEW" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Это код, который создает диалог:
private Dialog createFirstRunDialog() {
LayoutInflater inflator = (LayoutInflater)getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflator.inflate(R.layout.tutorial, (ViewGroup)findViewById(R.id.tutorialMain));
WebView webView = (WebView)layout.findViewById(R.id.tutorialBody);
webView.loadUrl(TUTORIAL_HTML_FILE);
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setView(layout)
.setCancelable(true)
.setIcon(R.drawable.icon)
.setTitle(R.string.tutorial_title)
.setNegativeButton(R.string.tutorial_doneButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismissDialog(TUTORIAL_DIALOG_ID);
}
});
return dialogBuilder.create();
}
Ссылка в html (внутри ресурса) является типичной ссылкой mailto:
<a href="mailto:support@myapp.com?subject=MyApp feature request">Tell us</a>
Поскольку диалог построен с помощью AlertDialog.Builder, а не явного намерения (фактически не вызывающего startActivity явно), я не могу (насколько мне известно) добавить флаг в качестве состояния сообщения об исключении. Я нашел здесь несколько постов с похожим исключением, но ни одно из них не было одинаковым или исправления, которые решили мою проблему. Заранее спасибо за помощь.