How can I send emails from my Android application?選択子でstartActivityから戻されたSecurityExceptionを処理する方法は?
に示されているように、私は
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
を使用しています。しかし、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を使用しています。
ありがとうございます!
実際には "Google Mail"で、 "Gmail"は問題なく動作します。私はバグ報告を書くつもりで、私は未キャッチ例外ハンドラを試してみます。これは私の環境設定ページとプロセスを強制終了させるので、私のプロセスで起こっていると思います。それを試してみましょう:)あなたのご意見ありがとうございました! –
キャッチされていない例外ハンドラ(デフォルト)またはメインスレッドを設定すると、セレクタが完全にロックアップされます。私のハンドラが呼び出されていますが、私が何をしているにせよ、セレクタはフォアグラウンドにぶら下がっています。私はハンドラを削除し、私のアプリがクラッシュするようにします。これは実際にハンターの選択者よりも優れています。 –
@MartinC .: 'PackageManager'と' queryIntentActivities() 'を使って、あなたのチューザーを動かす。 – CommonsWare