Я показываю активность в 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);
}
Но активность остается присутствует в заблокированном экране.
Любое предложение о том, как этого достичь?
Спасибо, Гейб. Я попробовал ваше предложение, но оно не сработало. Широковещательная передача получает штраф, и она вызывает метод «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} }; ' –
Получил! При приеме трансляции я вызываю методы «finish()» и «onDestry()». Может ли это оказать негативное влияние каким-либо другим образом? (т. е. утечка батареи, утечка памяти, ...). Еще раз спасибо за вашу помощь. –
Ondestroy не следует вызывать вручную. Система вызовет это после завершения вызова –