18

これは基本的な質問だと思います。インテントを使用してアクティビティを停止するオプションはありますか?

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554"));
startActivity(intent);

これは私のコードです。ユーザーが忙しい場合などに、このアクティビティを停止したい(つまり、この通話を切断したい)。そのために何ができますか?私はこれを試しました:

if (condition) {
    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554"));
    startActivity(intent);
}else {
    this.finish();
}

しかし、役に立たない。誰か提案がありますか?

4

3 に答える 3

28

私は数日前にこの問題を抱えていましたが、これを回避する方法を見つけたことを嬉しく思います。

まず、停止したいアクティビティにこれを追加しますAndroidManifest.xml

android:launchMode="singleTop"

CheckBox の例を使用します。チェックするとアクティビティが開始され、チェックを外すとアクティビティが強制終了されます。

例 アクティビティ A はアクティビティ B を呼び出し、インテントを使用してそれを強制終了しています。

A に入れるコード:

checkbox.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Intent intent = new Intent(A.this, B.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            if (enable.isChecked()) {
                intent.putExtra("keep", true);
                startActivity(intent);
            }
            else
            {
                intent.putExtra("keep", false);
                startActivity(intent);
            }
        }
    });

B に入れるコード:

boolean keep;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.B);
    intent = this.getIntent();
    boolean keep = intent.getExtras().getBoolean("keep");
    if(keep==true)
    {
        //execute your code here

    }
 }
    @Override
protected void onNewIntent(Intent intent)
{
    super.onNewIntent(intent);
    keep = intent.getExtras().getBoolean("keep");
    if(keep==false)
    {
        B.this.finish();
    }
}

説明 : これが基本的に行うことは、チェックボックスがチェックされている場合、アクティビティを呼び出してブール値を渡します。true の場合、アクティビティは維持され、フォアグラウンドに移動します。フラグを渡さないsingleTopと、このアクティビティの多くのインスタンスが作成されます。singleTop同じインスタンスのみが呼び出されるようにします。ここで、チェックボックスのチェックを外すと、Keep の新しい値が渡され、B で検証されます。チェックを外すと、アクティビティ A は false を渡し、したがって B はonNewIntent()関数内から終了します。

PS - 別のアクティビティからアクティビティ B を閉じることもできます。If other activity is C: を使用するだけです。

Intent intent = new Intent(C.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("keep", false);
startActivity(intent);
于 2013-01-19T06:03:36.723 に答える