Android, как начать новую деятельность, пока экран заблокирован? - PullRequest
1 голос
/ 22 марта 2011

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

Я использую GPS и оповещения о близости, чтобы проверить, когда был достигнут пункт назначения. Моя активность регистрирует ProximityAlertReceiver, так что:

private class ProximityAlertReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        String key = LocationManager.KEY_PROXIMITY_ENTERING;

        Boolean entering = intent.getBooleanExtra(key, false);

        if (entering) {
            System.out.println("You have entered the proximity area");
        } else {
            System.out.println("You have exited the proximity area");
        }

        Bundle bundle = intent.getExtras();
        int status = bundle.getInt("status");

        Intent i = new Intent();
        i.setClass(context, MEcheScreen.class);
        Bundle bundle1 = new Bundle();
        bundle1.putInt("status", status);
        i.putExtras(bundle1);

        i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        context.startActivity(i);



    }
}

Итак, когда у меня срабатывает сигнал сближения, начинается новое действие.

Я использую метод public void onNewIntent(Intent newIntent) {} для обработки при запуске нового действия.

Итак, проблема в том, что когда экран заблокирован и сработало предупреждение о близости, Intent в классе ProximityAlertReceiver не запускается.

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

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

нужна пара вещей ...

в своем приемнике добавьте следующее при запуске действия

intenet.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

в поле Создать действие добавить

KeyguardManager mKeyGuardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE); 
KeyguardLock mLock = mKeyGuardManager.newKeyguardLock("name of my app");  
mLock.disableKeyguard();

это работает для меня в приложении, которое запускается при запуске устройства

Я тоже тогда связывался с

Settings.System.getInt(cr,Settings.System.SCREEN_OFF_TIMEOUT,0);

но это другая история

0 голосов
/ 22 марта 2011

Возможно, вам следует вместо этого запустить уведомление (со звуками и мигающими лампами, даже если это необходимо), из которого можно запустить действие, если пользователь этого захочет, что, по-видимому, будет правильным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...