2015-03-17 2 views
0

Я показываю активность в lockscreen из фоновой службы, когда устройство заблокировано, когда пользователь находится в определенной области (получен GPS).Отключение активности, показанное с помощью FLAG_SHOW_WHEN_LOCKED

Активность имеет следующий код:

protected void onCreate(Bundle savedInstanceState) { 
     ... 
     getWindow().addFlags(
      WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD| 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| 
      WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
     ... 
    } 

И она вызывается из службы, как это:

if (inArea){ 
     PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); 
     if (pm.isScreenOn()==false){ 
      Intent wakeIntent = new Intent(mContext, mClass); 
      wakeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      mContext.startActivity(wakeIntent); 
     } 
    } 

Когда пользователь покидает область активности больше не должно быть видно на заблокированном экране , Но я не могу это понять.

Я попробовал это, когда пользователь GPS находится за пределами зоны:

if (!inArea){ 
     android.os.Process.killProcess(android.os.Process.myPid()); 
     System.exit(1); 
    } 

Но активность остается присутствует в заблокированном экране.

Любое предложение о том, как этого достичь?

ответ

2

Передайте услугу, когда пользователь выходит из нее. Регистрируйте вещательный приемник для этой трансляции. Если он получит эту трансляцию, попробуйте ее закончить().

Или дюжина вариаций на этом - все они сводятся к тому, чтобы приложение получило информацию, когда оно больше не находится в этом районе и не убило себя.

+0

Спасибо, Гейб. Я попробовал ваше предложение, но оно не сработало. Широковещательная передача получает штраф, и она вызывает метод «finish()», но активность все еще отображается, когда я разбудил телефон. Может быть, «finish()» следует вызывать за пределами «onReceive» BroadcastReceiver ??? В очередной раз благодарим за помощь. \t \t} 'BroadcastReceiver mReceiver = новый BroadcastReceiver() { \t @Override \t общественного недействительными OnReceive (Context контекст, Намерение намерение) { \t \t если (intent.getAction(). EqualsIgnoreCase ("killLockScreen")) { \t \t \t System.out.println ("! KILL myLockScreen!"); \t \t \t отделка(); \t \t} \t} }; ' –

+0

Получил! При приеме трансляции я вызываю методы «finish()» и «onDestry()». Может ли это оказать негативное влияние каким-либо другим образом? (т. е. утечка батареи, утечка памяти, ...). Еще раз спасибо за вашу помощь. –

+0

Ondestroy не следует вызывать вручную. Система вызовет это после завершения вызова –

Смежные вопросы