【发布时间】:2015-01-21 09:49:34
【问题描述】:
我正在尝试创建一个简单的 BroadcastReceiver,它可以接收 android.intent.action.BOOT_COMPLETED 意图以及 android.intent.action.MEDIA_MOUNTED 意图。这个想法是在接收到这些意图中的任何一个时启动服务。因此,该服务应在 Android 启动完成后或 USB 存储设备连接到 Android 目标时启动(如果此时该服务尚未启动)。 应用程序使用的权限在本节中定义
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
以下部分定义了负责处理意图和启动相应服务的 BroadcastReceiver。
<receiver
android:name="com.example.systemupgradeapplication.IntentReceiver"
android:label="USB Detection Receiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.MEDIA_REMOVED" />
<action android:name="android.intent.action.MEDIA_EJECT" />
<action android:name="android.intent.action.MEDIA_BAD_REMOVAL" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<data android:scheme="file" />
</intent-filter>
<intent-filter android:priority="999" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
下一节定义了应该从广播接收器启动的相应服务
<service android:name=".SysUpgradeService" />
注意:接收器和服务组件在 Android Manifest 的 <application> 部分中定义。
下面的sn-p是负责处理广播的意图的类
public class IntentReceiver extends BroadcastReceiver {
private final static String TAG = "IntentReceiver";
private static boolean m_UsbInserted = false;
private static boolean m_UsbRemoved = true;
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "LaunchReceiver::ACTION_MEDIA_MOUNTED :: intent received with path= ");
// TODO Auto-generated method stub
//if(intent.)
String action = intent.getAction();
if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
String path = intent.getDataString();
if(path.contains("usb")) {
m_UsbInserted = true;
Log.d(TAG, "LaunchReceiver::ACTION_MEDIA_MOUNTED :: intent received with path= "+path);
Intent myIntent = new Intent(context, SysUpgradeService.class);
myIntent.putExtra("path", path);
context.startService(myIntent);
}
}else if(action.equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d(TAG, "BOOT Completed intent received");
context.startService(new Intent(context, SysUpgradeService.class));
}
我面临的问题是没有任何意图到达我的广播接收器(IntentReceiver 类中的日志都没有打印在 logcat 中),即使我可以在 Android 调试日志中看到 BOOT_COMPLETE 和 MEDIA_MOUNTED正在广播意图。安卓系统启动后,这个应用程序也没有启动。
感谢您在这方面的帮助,我的方法可能有什么问题以及一些可能的解决方案。
【问题讨论】:
标签: java android android-intent broadcastreceiver intentfilter