1

最小限の画面アクティビティ ロガー アプリを実装したいと考えています。そのため、アプリケーションはバックグラウンドで (ユーザーの操作なしで) 実行する必要があり、画面のオンとオフのアクティビティをログに記録します。これらのコードを開始しましたが、自分の を登録する必要があるようです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;
    }

}
4

1 に答える 1

1

目的のためにサービスを使用し、アクティビティで行ったのと同じことを行います。

于 2013-04-28T03:24:37.677 に答える