2013-04-28 87 views
1

我想实现一个最小屏幕活动记录器应用程序。所以,应用程序应该在后台运行(无需用户交互),并且它会记录屏幕上的和停止的活动。我已经开始了这些代码,但似乎我需要注册我的ScreenBroadcastReceiverbroadcastreceiver。如果我在主要活动中使用下面的代码,它就可以工作。但是,我不想主要注册它,因为用户无法每次启动活动。那么,我应该在哪里注册我的BroadcastReceiver,以便应用程序在没有用户交互的情况下工作?Android注册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

使用Service为您的目的,并做你在活动中做的一样。

+0

谢谢,我添加了一个服务,并做了同样的,但没有工作。你能检查更新吗? – 2013-04-28 03:49:17

+0

我的意思是,使用broadcastreceiver与服务,而不是与活动一起使用。 – stinepike 2013-04-28 03:56:46

+0

是的,我做到了。我不再使用主要活动中的代码。但仍然没有成功.... – 2013-04-28 03:58:45