Problemas com bloqueio android no aplicativo de tela de bloqueio personalizado
Eu construí um aplicativo de tela de bloqueio personalizado que usa um receptor de transmissão e serviço para ouvir quando o usuário liga ou desliga a tela e de lá iniciar minha atividade. A atividade deve substituir completamente a tela de bloqueio. Para fazer isso, meu aplicativo deve desativar o bloqueio de ações do Android para que meu aplicativo funcione como a nova tela de bloqueio.
Em vez disso, o que acontece é que, assim que o aplicativo é instalado pela primeira vez, o serviço é iniciado pela primeira vez, o aplicativo parece estar funcionando. e quando o usuário desliga a tela do telefone pela primeira vez quando é ligado de novo, ele é apresentado ao meu aplicativo no topo e pode desbloquear o smartphone com o aplicativo. Mas então uma vez dentro do sistema operacional android se o usuário pressiona o botão home na próxima vez que desligar a tela e ligá-lo novamente em vez de ser levado de volta para o meu aplicativo, eles são levados para a tela de desbloqueio de estoque com o aplicativo aberto por baixo dele quando deveria estar no topo.
Aqui está o meu código:
Meu serviço:
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);
}
}
Meu receptor de transmissão:
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);
}
}
Minha atividade iniciada basicamente é vazia com apenas um botão de desbloqueio que chamafinish();
quando pressionado.