2

ボタンのクリックで新しい電子メール インテントを開始できるアプリを作成しました。いくつかのデバイスでテストしましたが、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 デバイスと互換性を持たせるには、より良い方法です。

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。ユーザーがこの情報を共有するすべての手段で、即時のインターネット接続が必要になるわけではありません。

com.example.tfs.MainCalActivityAPK に存在しないアクティビティ ( ) を参照しているため、クラッシュとは何の関係もありません。

于 2013-04-07T15:20:51.307 に答える