Как закрыть это занятие? - PullRequest
7 голосов
/ 04 августа 2011

Я создал свое приложение блокировки экрана, которое запускается с помощью SMS. У меня есть класс ListenSMS, который всегда прослушивает входящие SMS. Вот код:

for (SmsMessage message : messages) {
    String tempMessage[] = message.getDisplayMessageBody().toString().split(" ");

    //checking command dan password                             
    if (tempMessage[0].toString().equalsIgnoreCase("andro-lock") && tempMessage[1].toString().equals(tempPassword.toString())) {
        //Toast.makeText(ListenSMSservice.this, "Menjalankan command andro-lock", Toast.LENGTH_LONG).show();
        openDatabase();
        updateStatusL();
        Intent myIntent = new Intent(ListenSMSservice.this,LockScreenForm.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplication().startActivity(myIntent);
    }
    else if (tempMessage[0].toString().equalsIgnoreCase("andro-unlock") && tempMessage[1].toString().equals(tempPassword.toString())) {
        //Toast.makeText(ListenSMSservice.this, "Menjalankan command andro-unlock", Toast.LENGTH_LONG).show();
        openDatabase();
        updateStatusNL();                                                                   
        Intent myIntent = new Intent(ListenSMSservice.this,LockScreenForm.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Bundle myKillerBundle = new Bundle();
        myKillerBundle.putString("kill","1");
        myIntent.putExtras(myKillerBundle);
        getApplication().startActivity(myIntent);
    }
}

Если служба ListenSMS получила команду andro-lock, она перейдет к lockscreen.java и перейдет к lockscreen.java с намерением extra (putExtra) kill при получении команды andro-unclock. Вот мой lockscreen.java:

public class LockScreenForm extends Activity implements OnClickListener {
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.lockscreen);             

        Bundle extra = getIntent().getExtras();
        if (extra == null) {
            return;
        }
        //Toast.makeText(this, extra.getString("kill"), 1).show();
        else if(this.getIntent().getExtras().getString("kill").equalsIgnoreCase("1")) {
            try {
                Toast.makeText(this, "extra accepted", 1).show();
                finish();
            } catch (Exception e) {
                // TODO: handle exception
                Toast.makeText(this, e.getMessage(), 1).show();
            }

        }

    }
}

Я хочу закрыть свой locksreen.java, когда моя служба ListenSMS получила команду "andro-unlock", поэтому я добавил дополнительно в намерение "kill" и проверил это в lockscreen.java. Этот lockscreen.java может проверять дополнительное намерение и может отображать тост «дополнительно принят», но может закрыть действие блокировки экрана с помощью finish ().

На данный момент я предполагаю, что Intent.FLAG_ACTIVITY_NEW_TASK дублирует локскрин-активность. Таким образом, он создаст двойную блокировку экрана, а завершающий метод закроет другой файл lockscreen.java, запущенный Intent.FLAG_ACTIVITY_NEW_TASK. Это только предположение. Я ошибся? Пожалуйста, поправьте меня.

Кто-нибудь знает, как решить мою проблему? Я действительно хочу, чтобы команда "andro-unlock" могла закрыть активность на экране блокировки, и чтобы она работала для моего финального проекта в колледже. Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

С http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK:

When using this flag, if a task is already running for the activity you are now starting, then a new activity will not be started; instead, the current task will simply be brought to the front of the screen with the state it was last in. See FLAG_ACTIVITY_MULTIPLE_TASK for a flag to disable this behavior. 

Я ожидаю, что ваша проблема в другом месте.Я бы предложил, чтобы на экране блокировки активировался BroadcastReceiver, а затем, когда получено сообщение о разблокировке, отправьте намерение, которое BroadcastReceiver поймает.После этого действие может полностью завершиться.

0 голосов
/ 27 сентября 2018

Попробуйте это: Intent.FLAG_ACTIVITY_NEW_TASK

...