最小限の画面アクティビティ ロガー アプリを実装したいと考えています。そのため、アプリケーションはバックグラウンドで (ユーザーの操作なしで) 実行する必要があり、画面のオンとオフのアクティビティをログに記録します。これらのコードを開始しましたが、自分の を登録する必要があるようですScreenBroadcastReceiver
broadcastreceiver
。メインアクティビティで以下のコードを使用すると、機能します。ただし、ユーザーは毎回アクティビティを起動できないため、メインに登録したくありません。BroadcastReceiver
では、アプリケーションがユーザーの操作なしで機能するようにするには、どこに登録すればよいでしょうか?
oncreate
主な活動中
//I need to find another place to put these code, Where ???
//IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
//filter.addAction(Intent.ACTION_SCREEN_OFF);
//BroadcastReceiver screenOnReceiver = new ScreenBroadcastReceiver();
//registerReceiver(screenOnReceiver, filter);
これは ScreenBroadcastReceiver で、画面がオンのときにトリガーされます。
public class ScreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.w("OnReceive", "SCREEN IS ON");
}
}
}
これは、プログラムをバックグラウンドで実行するための BootReceiver です。
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, ScreenListenerService.class);
context.startService(service);
//IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
//filter.addAction(Intent.ACTION_SCREEN_OFF);
//BroadcastReceiver screenOnReceiver = new ScreenBroadcastReceiver();
//context.registerReceiver(screenOnReceiver, filter);
}
}
これはマニフェストです:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<service android:name=".ScreenListenerService"></service>
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
アップデート:
サービスを追加しましたが、機能しません。何かを追加するのを忘れましたか?または何 ?
public class ScreenListenerService extends Service {
public void OnCreate(){
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver screenOnReceiver = new ScreenBroadcastReceiver();
registerReceiver(screenOnReceiver, filter);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}