我已经制作了一个应用程序,可以在按钮点击时启动新的电子邮件意图,我已经在几个设备上测试了它似乎工作正常,除了它在galaxy 2和galaxy 3上崩溃。这是我的代码检查互联网访问然后调用意图。
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应用程序进行罚款,因此无法启动意图,所以我想知道如何制作通用意图来打开任何形式的电子邮件应用程序,或者如果有更好的方法使其与galaxy设备兼容。
答案 0 :(得分:4)
请删除:
sendIntent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
这对用户造成了侮辱,迫使他们使用Gmail。它是用户的设备,用户的带宽,用户的电池,用户的数据和用户的时间。请允许用户发送用户希望的用户数据。
此外,该活动可能不存在于所有版本的Gmail中,并且该活动可能无法在所有版本的Gmail中导出。
另外,请更改:
sendIntent.setType("plain/text");
为:
sendIntent.setType("text/plain");
因为plain/text
不是有效的MIME类型。
你还应该摆脱所有ConnectivityManager
的东西。并非用户希望共享此信息的所有方式都需要立即进行Internet连接。
这些都与您的崩溃无关,这是因为您引用了APK中不存在的活动(com.example.tfs.MainCalActivity
)。