我在使用BroadCastReceiver
时遇到困难,只有当设备启动或重启时才会调用它。我正在使用OTG电缆连接USB设备。 Android系统每次都显示USB插入图标,但我的应用程序没有收到任何事件。
让我知道我在做什么错误。
我的应用程序只有BroadcastReceiver
,如下所示。
public class MountReceiver extends BroadcastReceiver {
private static final String TAG = MountReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
String actionName = intent.getAction();
Toast.makeText(context.getApplicationContext()
, "on Receive", Toast.LENGTH_LONG).show();
extractAllDataFromIntent(intent, context);
boolean isMounted;
if (actionName.equals("android.intent.action.MEDIA_MOUNTED")) {
isMounted = true;
} else {
// actionName.equals("android.intent.action.MEDIA_UNMOUNTED"
isMounted = false;
}
}
private void extractAllDataFromIntent(Intent intent, Context context) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
Log.e(TAG, "Dumping Intent start");
StringBuilder msg = new StringBuilder();
msg.append(TAG + " Seprate app");
while (it.hasNext()) {
String key = it.next();
Log.e(TAG, "[" + key + "=" + bundle.get(key) + "]");
msg.append("[" + key + "=" + bundle.get(key) + "]");
}
Log.e(TAG, "Dumping Intent end");
Toast.makeText(context.getApplicationContext()
, msg, Toast.LENGTH_LONG).show();
//Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
}
}
}
我有这个接收器的清单条目如下。
<receiver
android:name="com.example.manmohan.mountreceiverdemo.MountReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.MEDIA_UNMOUNTED" />
<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" />
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
<action android:name="android.hardware.usb.action.USB_STATE" />
<data android:scheme="file" />
</intent-filter>
</receiver>
我看到一个奇怪的情况是接收器在添加WiFi状态更改回调时正在接收WiFi更改事件,但仍然没有收到任何USB事件。
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
答案 0 :(得分:0)
我相信您想知道在任何给定时间点是否安装了外部存储器:
Is there a way to tell if the sdcard is mounted vs not installed at all?
你已经为一个接收者聚集了所有的行动。尝试为每个动作保留单独的接收器,并检查是否可以看到差异。
我相信您已在清单中添加了权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />