ブロードキャストレシーバーとサービスを使用して、ユーザーが画面をオンまたはオフにしたときにリッスンし、そこからアクティビティを起動するカスタムロック画面アプリを作成しました。このアクティビティは、ロック画面を完全に置き換えることになっています。これを行うために、私のアプリはAndroidストックロックを無効にして、私のアプリが新しいロック画面として機能できるようにすることになっています。
代わりに、アプリケーションが最初にインストールされた後、サービスが最初に開始された場合、アプリケーションは機能しているように見えます。また、ユーザーが最初に電話の画面をオフにしてから再びオンにすると、私のアプリが上に表示され、私のアプリで電話のロックを解除できます。しかし、Android OS内で、ユーザーが次に画面をオフにしてから再びオンにしたときにホームボタンを押すと、アプリケーションに戻されるのではなく、アプリケーションが開いた状態でストックロック解除画面に移動します。それが上にあるべきとき。
これが私のコードです:
私のサービス:
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);
}
}
私の放送受信機:
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);
}
}
開始された私のアクティビティは基本的に空でfinish();
、押されたときに呼び出すロック解除ボタンが1つだけです。