我制作了一个应用程序,可以通过单击按钮启动新的电子邮件 Intent ,我已经在多个设备上测试了它,它似乎工作正常,只是它在 Galaxy 2 和 Galaxy 3 上崩溃。这是我检查的代码互联网访问然后调用 Intent 。
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
if((cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()))
{
Log.d("Main", "Start Email");
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { monkey.getSendTo() });
sendIntent.setData(Uri.parse(monkey.getSendTo()));
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "TFS note");
sendIntent.setType("plain/text");
sendIntent.putExtra(Intent.EXTRA_TEXT, "Sent From TFS\n");
startActivity(sendIntent);
} else{//toast if there is no internet
Toast.makeText(getActivity().getBaseContext(),"No Internet\n access",
Toast.LENGTH_SHORT).show();
}
在我看来,在 Galaxy 设备上,它没有对 gmail 应用程序进行罚款,因此它无法启动 Intent ,所以我想知道如何才能创建一个通用 Intent 来打开任何形式的电子邮件应用程序,或者是否有更好的方法使其与 Galaxy 设备兼容。
最佳答案
请删除:
sendIntent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
这对用户来说是一种侮辱,迫使他们使用 Gmail。它是用户的设备、用户的带宽、用户的电池、用户的数据和用户的时间。请允许用户按照自己的意愿发送用户数据。
此外,该 Activity 可能并不存在于所有版本的 Gmail 中,并且该 Activity 可能不会在所有版本的 Gmail 中导出。
另外,请更改:
sendIntent.setType("plain/text");
至:
sendIntent.setType("text/plain");
as plain/text
不是有效的 MIME 类型。
您还应该删除所有 ConnectivityManager
内容。并非用户想要共享此信息的每种方式都需要立即连接互联网。
这些都与您的崩溃无关,这是因为您引用的 Activity (com.example.tfs.MainCalActivity
) 在您的 APK 中不存在。
关于Galaxy 设备上的 Android 电子邮件 Intent 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15863966/