USB挂载接收器仅在启动完成时调用

时间:2016-03-14 10:44:14

标签: android broadcastreceiver android-broadcast

我在使用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>

1 个答案:

答案 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" />