2016-09-05 8 views
3

私のアプリケーションから電子メールアプリを開き、エラーを取得しようとしています。リストビューで自分のアプリから電子メールアプリを開きます

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. 

問題は、FLAG_ACTIVITY_NEW_TASKです。 は私もaddFlags

しようとしたんだこれは私のコードです:

private void mailTo(String mail) { 
    Intent i = new Intent(Intent.ACTION_SEND).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.setType("message/rfc822"); 
    i.putExtra(Intent.EXTRA_EMAIL , new String[]{mail}); 
    try { 
      context.startActivity(Intent.createChooser(i, "")); 
} catch (ActivityNotFoundException ex) { 
     Toast.makeText(context, ex.getMessage(), Toast.LENGTH_LONG).show(); 
    } 
} 

私は同じクラスで、私はより多くのテントアクションを働いている、ということに注意しなければなりません。

private void callTo(String number) { 
    Intent callIntent = new Intent(Intent.ACTION_CALL).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    callIntent.setData(Uri.parse("tel:" + number)); 
    context.startActivity(callIntent); 
} 

そして:

private void smsTo(String phoneNumber) { 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent); 
} 
+0

私はウルのポストを見て前に、私は他のPLACでその答えを見つけますe、 – Shachar87

答えて

0

誰かがIntent.createChooserがフラグを対処されていない私に言いました。

したがって、私は次のようにする必要がありました意図tmp = Intent.createChooser ...そしてtmpにフラグを再設定してください。

は私が交換さ:

Intent tmp = Intent.createChooser(i, "").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(tmp); 

、削除:

context.startActivity(Intent.createChooser(i, "")); 

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
1

あなたはcontext()オブジェクトからそれを得ることなくstartActivity()を呼び出してみたことがありますか? context()にはアプリケーションの現在の状態があるため、目的地をどこから開始しているかわからない場合があります。だから、次のようになります。

startActivity(Intent.createChooser(i, "")); 

そして、それとともに、フラグを削除

Intent i = new Intent(Intent.ACTION_SEND); 

EDIT

あなたがMainActivity()ないActivity()からintent()を呼び出しているので、渡してみてくださいクラスのコンストラクタへのパラメータはcontext()です。その後、

Context context; 

public MyAdapaterClass(Context context) { 
this.context=context; 
} 

そして、このようintent()を開始:

Intent i = new Intent(context, MainActivity.class); 
+0

私はあなたの答えを理解していません。このクラスはBaseAdapterから拡張されているので、親から取得するコンテキストです。 – Shachar87

+0

どういうわけか私はあなたがMainActivityクラスからインテントを呼び出していることを理解しました。変更を投稿します。 –

+0

私が言ったように、私はすでにperentからコンテキストを取得します。私が必要とするものではありません。 Intent.ACTION_SENDのIntentが必要です。 – Shachar87

関連する問題