2

我制作了一个应用程序,可以通过单击按钮启动新的电子邮件意图,我已经在几台设备上对其进行了测试,它似乎工作正常,除了它在银河 2 和银河 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();
}

在我看来,在银河设备上,它没有对 gmail 应用程序进行罚款,因此它无法启动意图,所以我想知道如何制定一个通用意图来打开任何形式的电子邮件应用程序,或者是否有是使其与银河设备兼容的更好方法。

4

1 回答 1

4

请删除:

sendIntent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");

这是对用户的侮辱,迫使他们使用 Gmail。它是用户的设备、用户的带宽、用户的电池、用户的数据和用户的时间。请允许用户按照用户的意愿发送用户的数据。

此外,该活动可能并不存在于所有版本的 Gmail 中,并且该活动可能不会在所有版本的 Gmail 中导出。

另外,请更改:

sendIntent.setType("plain/text");

至:

sendIntent.setType("text/plain");

asplain/text不是有效的 MIME 类型。

你也应该摆脱所有的ConnectivityManager东西。并非用户想要共享此信息的所有方式都需要立即连接 Internet。

这些都与您的崩溃无关,这是因为您引用了一个com.example.tfs.MainCalActivityAPK 中不存在的活动 ( )。

于 2013-04-07T15:20:51.307 回答