ブロードキャストレシーバーとサービスを使用して、ユーザーが画面をオンまたはオフにしたときにリッスンし、そこから自分のアクティビティを開始するカスタムロック画面アプリを構築しました。アクティビティはロック画面を完全に置き換えるものとします。これを行うために、私のアプリは新しいロック画面として機能できるように、私のアプリはアンドロイドストックロックを無効にすることになっています。カスタムロック画面アプリのアンドロイドロックに関する問題点
代わりに、アプリケーションが最初にインストールされると、サービスが最初に起動してアプリケーションが動作しているように見えます。ユーザーが最初に携帯電話の画面をオフにしたときに、そのアプリを元の状態に戻して表示し、自分のアプリを使って携帯電話のロックを解除することができます。しかし、アンドロイド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つのロック解除ボタンと空であります押されたとき。
これは、アプリケーションが処理されている可能性があります。この問題は連続して発生しますか? – jaisonDavis