如何在接收时使用广播接收器

时间:2014-11-07 08:05:54

标签: android

我有一个项目,当我运行应用程序时,一个服务应该是活动的,当设备打开时,我的android服务应该是活动的。 该项目在模拟器中成功运行,但在我的手机中,当我打开设备时,它不起作用!

我的广播接收器:

 public class BroadcastReceiverOnTurnedOn extends BroadcastReceiver {
 @Override
  public void onReceive(Context context, Intent intent) {
      Intent startServiceIntent = new Intent(context, MyService.class);
      context.startService(startServiceIntent);
  }
 }

我补充说:

  <receiver android:name="com.dariran.BroadcastReceiverOnTurnedOn">  
    <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
    </intent-filter>  
  </receiver>

到Manifest.xml上的appliation标签和

  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

3 个答案:

答案 0 :(得分:0)

您正在注册BroadcastReceiver而不是Service。服务通常一直在后台运行(如果内存和资源允许)。

只有在设备重新启动时,您的广播接收器才会激活 - 每次启动时,您的模拟器都会“启动”。安装应用程序时,您的手机无法“启动”。

您应该注册“app installed”之类的活动,或者实际实现服务,例如:

http://www.vogella.com/tutorials/AndroidServices/article.html

答案 1 :(得分:0)

您需要确保一旦您在设备上安装应用程序,应该通过单击应用程序图标启动一次,然后只有启动接收器将在后续重新启动呼叫时接收启动事件。

答案 2 :(得分:0)

我感到不安,如果我在内部存储中成功安装app甚至设备重启,但是当我在外部存储上安装应用程序然后重新启动设备时它无法正常工作

我有一个项目,当运行应用程序时,一个服务处于活动状态,当设备启动时,我的android服务处于活动状态。项目在设备的内部存储器中成功运行但是当我将其安装在外部存储器上并重新启动我的设备时,不能正常工作!

首先我在第一个活动中呼叫我的服务并且它可以工作,但是当我重新启动我的设备时它不起作用!

我的活动:

public class FirstClass extends Activity 
{
  public void onCreate(Bundle savedInstanceState) 
  {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.first);
   final Handler handler = new Handler();
   handler.postDelayed(new Runnable() 
   {
     public void run()
    {
        startService(new Intent(getApplicationContext(), MyService.class));
        startActivity(new Intent(FirstClass.this, MainActivity.class));
        finish();
    }
 },5000);
}
 /////////////////////////////////////////////////
}

我的广播接收器:

 public class BroadcastReceiverOnTurnedOn extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
    Intent startServiceIntent = new Intent(context, MyService.class);
    context.startService(startServiceIntent);
  }
 }

我补充说:

  <service
    android:name="com.dariran.MyService"
    android:enabled="true"
    android:exported="true" >
  </service>
  <receiver android:name="com.dariran.BroadcastReceiverOnTurnedOn"
    android:enabled="true">
    <intent-filter android:priority="1">
        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter>
    <intent-filter>
        <action  android:name="android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" />
    </intent-filter>
 </receiver>to appliation tag on Manifest.xml and 

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

我将此代码添加到我的服务类中,以设置过滤器来识别外部存储,但不再重复:(

 @Override
 public void onStart(Intent intent, int startId) {
   try {

    IntentFilter filter = new IntentFilter(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
    filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
    BroadcastReceiver mReceiver = new BroadcastReceiverOnTurnedOn();
    registerReceiver(mReceiver, filter);

   } catch (Exception e) {
   }
 }