我在用着
final Intent notice = new Intent();
notice.setType("text/plain");
notice.putExtra(Intent.EXTRA_SUBJECT, "My Subject");
notice.putExtra(Intent.EXTRA_TEXT, "My Text");
try {
getContext().startActivity(Intent.createChooser(notice, "Send..."));
} catch(final android.content.ActivityNotFoundException ex) {
Toast.makeText(getContext(), "There are no email clients installed.", Toast.LENGTH_SHORT).show();
} catch(final SecurityException ex) {
Toast.makeText(getContext(), "Sorry, application does not have permissions to send to this destination.", Toast.LENGTH_SHORT).show();
} // try/catch
如中所示如何从 Android 应用程序发送电子邮件? https://stackoverflow.com/questions/2197741/how-to-send-email-from-my-android-application
但是,有一些应用程序,如果用户选择,则会导致应用程序崩溃SecurityException
,因为当前应用程序没有足够的权限来发送意图:
02-05 23:11:33.417: E/AndroidRuntime(20255): java.lang.SecurityException: Permission Denial: starting Intent { typ=text/plain flg=0x3000000 cmp=com.google.android.gm/.AutoSendActivity (has extras) } from ProcessRecord{4084ca60 20255:com.example.myapp/10065} (pid=20255, uid=10065) requires com.google.android.gm.permission.AUTO_SEND
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.os.Parcel.readException(Parcel.java:1322)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.os.Parcel.readException(Parcel.java:1276)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1351)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1374)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.app.Activity.startActivityForResult(Activity.java:2827)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.app.Activity.startActivity(Activity.java:2933)
02-05 23:11:33.417: E/AndroidRuntime(20255): at com.android.internal.app.ResolverActivity.onIntentSelected(ResolverActivity.java:203)
02-05 23:11:33.417: E/AndroidRuntime(20255): at com.android.internal.app.ResolverActivity.onClick(ResolverActivity.java:117)
02-05 23:11:33.417: E/AndroidRuntime(20255): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:873)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.widget.ListView.performItemClick(ListView.java:3513)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.os.Handler.handleCallback(Handler.java:587)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.os.Looper.loop(Looper.java:130)
02-05 23:11:33.417: E/AndroidRuntime(20255): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-05 23:11:33.417: E/AndroidRuntime(20255): at java.lang.reflect.Method.invokeNative(Native Method)
02-05 23:11:33.417: E/AndroidRuntime(20255): at java.lang.reflect.Method.invoke(Method.java:507)
02-05 23:11:33.417: E/AndroidRuntime(20255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-05 23:11:33.417: E/AndroidRuntime(20255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-05 23:11:33.417: E/AndroidRuntime(20255): at dalvik.system.NativeStart.main(Native Method)
如您所见,例外情况是没有直接触及我的任何代码。我不想将缺少的权限添加到清单中(我不知道选择器中会显示哪些其他应用程序),但只需处理SecurityException
并通知用户。我会在哪里这样做?
在这种情况下,我使用的是 Android 2.3.6。
提前致谢!