У меня есть alertDialogBuilder
, который создает намерение отправить электронное письмо.«java.lang.SecurityException: Permission Denial: start Intent», отправив электронное письмо на Android
Он работал хорошо, но так как на прошлой неделе он перестал работать и дает следующее сообщение об ошибке:
java.lang.SecurityException: Permission Denial: starting Intent
Я использую один и тот же прибор все время с Android 4.4.2 и версия на моем Gradle я нахожусь поддерживает следующие версии:
minSdkVersion 16
targetSdkVersion 23
Мой код:
alertDialogBuilder
.setMessage("Do you want to send an email to " + getString(R.string.companyName) + "?")
.setCancelable(false)
.setPositiveButton("Send",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
Intent gmail = new Intent(Intent.ACTION_SEND);
gmail.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
gmail.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
gmail.setData(Uri.parse("[email protected]"));
gmail.setType("plain/text");
startActivity(gmail);
}
})
.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
Я KNO ж, что есть два вопроса, непосредственно связанных с этим вопросом:
, но я не мог решить мою проблему ни с одной из них. Я также не понимаю, почему он работал неделю назад, и теперь он прекратил работать. Я не внес никаких изменений в приложение Gmail на моем устройстве, и я также установил его на устройстве.
Что мне не хватает? Я могу вставить полный стек, если это необходимо, я поместил только имя ошибки, чтобы уменьшить размер вопроса.
EDIT: Моя ошибка StackTrace заключается в следующем:
12-27 17:38:15.507 7816-7816/com.project.user.product E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.project.user.product, PID: 7816
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.SEND typ=plain/text cmp=com.google.android.gm/.ComposeActivityGmail (has extras) } from ProcessRecord{428b7c68 7816:com.project.user.product/u0a107} (pid=7816, uid=10107) not exported from uid 10048
at android.os.Parcel.readException(Parcel.java:1472)
at android.os.Parcel.readException(Parcel.java:1426)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2222)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1425)
at android.app.Activity.startActivityForResult(Activity.java:3480)
at android.app.Activity.startActivityForResult(Activity.java:3432)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:842)
at android.app.Activity.startActivity(Activity.java:3683)
at android.app.Activity.startActivity(Activity.java:3651)
at com.project.user.product.LoginActivity$7$2.onClick(LoginActivity.java:284)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
at dalvik.system.NativeStart.main(Native Method)
Заранее спасибо!
«Я могу вставить полную стеклу, если потребуется» - это, вероятно, хорошая идея. Лучшая идея - избавиться от 'gmail.setClassName (« com.google.android.gm »,« com.google.android.gm.ComposeActivityGmail »);', поскольку AFAIK это действие больше не экспортируется (что приведет к вашему сообщению об ошибке), и в первую очередь это была враждебная пользователю идея. – CommonsWare
@CommonsWare Спасибо за ответ, но я не совсем понимаю, что вы имеете в виду со второй частью вашего комментария. И вместо этой функции, что я должен использовать? Или просто избавиться от него? –
«Я не совсем понимаю, что вы имеете в виду со второй частью вашего комментария» - не все используют Gmail. Ваш код предполагает, что все это делают. Для пользователей, не относящихся к Gmail, ваше приложение может потерпеть крах (Gmail не существует) или маршрутизировать пользователей в Gmail, которые они не хотят. «Или просто избавиться от него?» -- верный. – CommonsWare