Android注册广播接收器连续运行

时间:2013-04-28 03:22:13

标签: android broadcastreceiver

我想实现一个最小屏幕活动记录器应用程序。因此,应用程序应该在后台运行(没有用户交互),它将记录屏幕的开启和关闭活动。我已经启动了这些代码,但似乎我需要注册我的ScreenBroadcastReceiver broadcastreceiver。如果我在主要活动中使用以下代码执行此操作,则可行。但是,我不想在main中注册它,因为用户每次都无法启动活动。那么,我应该在哪里注册我的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;
    }

}

1 个答案:

答案 0 :(得分:1)

使用Service表示您的目的,并按照您在活动中的操作进行操作。