Подтвердить что ты не робот

Как остановить активность в android, используя намерение?

Я думаю, что это основной вопрос. Есть ли способ остановить действие, используя намерение.

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();
}

Но бесполезно. Есть ли у кого-нибудь предложение?

4b9b3361

Ответ 1

У меня была эта проблема несколько дней назад, и я рад сообщить вам, что нашел способ обойти это.

Прежде всего, к активности, которую вы хотите остановить, добавьте это в AndroidManifest.xml:

android:launchMode="singleTop"

Я собираюсь использовать пример CheckBox. Когда он проверяет, что активность запущена, и когда unchecked уничтожит действие,

Пример Действие 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();
    }
}

Объяснение: В основном это происходит, когда флажок установлен, он вызывает активность и передает логическое значение, если оно истинно, активность сохраняется и выводится на передний план. Теперь, если вы не передадите флаг singleTop, тогда будет создано множество экземпляров этого действия. singleTop гарантирует, что будет вызываться только один и тот же экземпляр. Теперь, когда флажок снят, новое значение для keep передается, которое проверено в B. Если он не отмечен, операция A будет передавать значение false, и, следовательно, B завершает себя с помощью функции onNewIntent().

Надеюсь, что это поможет!

P.S - Вы можете закрыть Activity B из другого действия. Просто используйте Если другое действие - 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);

Ответ 2

Вы можете отключить фоновые данные в магазине воспроизведения и играть в службы, чтобы не войти в магазин воспроизведения. Он просто скажет: "НЕ МОЖЕТ БЫТЬ ЗАГРУЖЕНА"  Это единственный способ, которым я обнаружил, чтобы остановить намерение