Zbudowałem niestandardową aplikację blokady ekranu, która korzysta z odbiornika i usługi do nasłuchu, gdy użytkownik włącza się lub wyłącza z ekranu i uruchamia moją aktywność. Działanie ma całkowicie zastąpić ekran blokady. Aby to zrobić, moja aplikacja powinna wyłączyć blokadę na Androidzie, aby moja aplikacja działała jak nowy ekran blokady.Problemy z blokadą Androida w niestandardowej aplikacji blokady ekranu
Zamiast tego, co dzieje się po pierwszym zainstalowaniu aplikacji, usługa uruchomiona po raz pierwszy wydaje się działać. a kiedy użytkownik po raz pierwszy wyłącza ekran swojego telefonu po jego ponownym włączeniu, wyświetla się aplikacja działająca na górze i może odblokować telefon z moją aplikacją. Ale potem raz w systemie Android, jeśli użytkownik naciśnie przycisk powrotu do domu po następnym wyłączeniu ekranu i ponownym włączeniu go zamiast przywracania do mojej aplikacji, zostanie przeniesiony do ekranu odblokowania zapasów, a moja aplikacja zostanie otwarta pod nim, kiedy powinien być na górze.
Oto mój kod:
Moje życzenie:
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d("MyService","Service STARTED");
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
final BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
}
}
Mój odbiornik transmisji:
public class ScreenReceiver extends BroadcastReceiver {
public static ArrayList<String> runningApplications = new ArrayList<String>();
private Context ctext;
public static boolean screenIsLocked;
public static KeyguardManager keyguardManager;
public static KeyguardLock lock;
@Override
public void onReceive(final Context context, final Intent intent) {
ctext = context;
keyguardManager = (KeyguardManager)ctext.getSystemService(Activity.KEYGUARD_SERVICE);
lock = keyguardManager.newKeyguardLock(Context.KEYGUARD_SERVICE);
lock.disableKeyguard();
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenIsLocked = true;
Log.d("ScreenReceiver", "False");
Intent intenti = new Intent();
intenti.setClass(context, starterActivity.class);
intenti.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intenti.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intenti);
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenIsLocked = false;
Log.d("ScreenReceiver", "True");
Intent intenti = new Intent();
intenti.setClass(context, starterActivity.class);
intenti.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intenti.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intenti);
}
}
Moja aktywność, która jest uruchamiana jest w zasadzie pusty pomocą jednego przycisku odblokowującego, który wywołuje finish();
po naciśnięciu.
Może to wynikać z faktu, że aplikacja została usunięta .... czy problem występuje kolejno? – jaisonDavis