ユーザーが任意のタブ アクティビティからメールを送信できる TabHost アプリケーションがあります。Email インテントの起動を処理する任意のアクティビティからインスタンス化できる 1 つのクラスを作成したいと考えていますが、これが理想的な方法かどうかはわかりません。
コードの重複をいくらか節約できますが、createChooser() を起動する別のインテントを作成するインテントを作成する必要があるため、多くのオーバーヘッドが発生するようです。より良い方法はありますか?
アプリケーションコード
Intent send = new Intent (this, Email.class);
send.putExtra ("mailto", EMAIL_ADDRESS);
send.putExtra ("subject", SUBJECT);
send.putExtra ("body", MSG_BODY);
this.startActivity (send);
メールクラス
public class Email extends Activity
{
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
Log.d ("email" , " oncreate");
Bundle ex = getIntent ().getExtras ();
String mailto = ex.getString ("mailto");
String subject = ex.getString ("subject");
String body = ex.getString ("body");
if (body == null)
body = "";
if (subject == null)
subject = "";
try
{
// use the builtin chooser for users mail app or SMS
/* NOTE: AndroidManifest has android:noHistory="true" for this */
Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String [] {mailto});
sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);
startActivityForResult (Intent.createChooser(sendIntent, "Send via which Application?"), 0);
}
catch (Exception e)
{
Toast.makeText (this, "No activity was found to handle this action",Toast.LENGTH_SHORT).show();
}
}
}