2013-02-06 118 views
0

我想实现的是赶上启动完成事件的广播接收机。引导接收器不工作

我把权限在manifet

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

我把意图过滤清单中的接收器标签后(类文件是在接收包)

<receiver android:name=".receivers.BootReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
      <action android:name="android.intent.action.REBOOT" /> 
     </intent-filter> 
</receiver> 

最后我宣布接收者类。该类应从数据库加载一些数据并设置警报。然而为了检查它是否有效,我已经放了一个吐司,但它没有显示和振动。

public class BootReceiver extends BroadcastReceiver { 

    public void onReceive(Context context, Intent callingIntent) { 
     Vibrator vibrator=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
     vibrator.vibrate(5000); 
     Toast.makeText(context, "BOOT RECEIVED", Toast.LENGTH_LONG).show(); 
    } 
} 

有人知道为什么请吗?

回答

1

所有刚安装的应用程序进入停止状态(实际的文件是/data/system/packages-stopped.xml)

在Android 3.1开始,系统的软件包管理器跟踪应用程序,它是在一个停止状态。看到这个链接:android 3.1 launch control

意图与行动android.intent.action.BOOT_COMPLETEDFLAG_EXCLUDE_STOPPED_PACKAGES额外的标志。这意味着,所有的应用程序终止将不会收到BOOT_COMPLETED事件。

为了让您的应用程序从停止状态的,只是在安装后手动启动它。然后,您可以重新启动并查看预期的Toast。

+0

+1有趣的解释 - 我只是想回答说你需要先运行应用程序,然后才能收到它。尼斯。 –

+0

谢谢。 BTW预装的应用程序不会去的/data/system/packages-stopped.xml,因此所有的人都能够接受的事件。此外,应用程序的强制停止使该应用程序进入该文件,意味着停止状态。 –