Android:检测USB

时间:2011-01-05 04:45:11

标签: android usb

有没有办法在您的活动/应用程序中(以编程方式)知道用户已通过USB将手机连接到PC?

6 个答案:

答案 0 :(得分:38)

有些人建议使用UMS_CONNECTED,该版本在Android的最新版本中已弃用 另一个问题是它不适用于支持MTP的设备

其他人建议使用BatteryManager,更准确地说ACTION_BATTERY_CHANGED以及BATTERY_PLUGGED_ACBATTERY_PLUGGED_USB 如果您想要检测设备的电池或充电状态,这是完美的,但不是USB连接的真正良好指示。 使用电池管理器很容易在较旧的Android平板电脑上失败,例如XOOM,ICONIA标签A510和较旧的华硕平板电脑。

要完全检测到设备已插入PC,您可以: 使用android.hardware.usb.action.USB_STATEconnected 代替BatteryManager东西

代码示例

public static boolean isConnected(Context context) {
        intent = context.registerReceiver(null, new IntentFilter("android.hardware.usb.action.USB_STATE"));
        return intent.getExtras().getBoolean("connected");
    }

希望这有帮助

答案 1 :(得分:5)

能够通过以下方式注册广播接收器来检测USB连接,

IntentFilter mIntentFilter = new IntentFilter(Intent.ACTION_UMS_CONNECTED);

BroadcastReceiver bd = new intentReceiver();
registerReceiver(bd, mIntentFilter);

答案 2 :(得分:5)

的Manifest.xml:

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.ums_connected" />
    </intent-filter>
</receiver>

MyReceiver:

public class MyReceiver extends BroadcastReceiver{
if (intent.getAction().equalsIgnoreCase(
        "android.intent.action.UMS_CONNECTED")) {...}
}

答案 3 :(得分:4)

如果你想做的就是检测你是否有权访问SD卡,那么以下内容将有效:

private boolean canWriteToFlash() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        // Read only isn't good enough
        return false;
    } else {
        return false;
    }
}

答案 4 :(得分:3)

检查android.intent.action.ums_connected时的主要问题是使用MTP协议的设备(例如Samsung Nexus Galaxy)不会收到此广播。

这就是我使用其他方式检测智能手机何时插入或拔出的原因:

我检查了batery状态。当电池发生事件时,会调用一个名为ACTION_BATTERY_CHANGED的意图。在这个意图中,有一些额外的字段包含一些信息。其中之一是EXTRA_PLUGGED

Indicating whether the device is plugged in to a power source; 0 means it is on battery, other constants are different types of power sources.

其他常量为BATTERY_PLUGGED_ACBATTERY_PLUGGED_USB

通过此广播,即使使用MTP协议,您也可以知道智能手机是否已插入USB。

要知道智能手机是否已拔下,您必须检查EXTRA_PLUGGED值何时从BATTERY_PLUGGED_USB变为0

答案 5 :(得分:2)

这对我有用。

将此添加到您的AndroidManifest.xml

        <receiver android:name=".PlugInControlReceiver">
            <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
                <action android:name="android.hardware.usb.action.USB_STATE" />
            </intent-filter>
        </receiver>

然后创建您的BroadcastReceiver

public class PlugInControlReceiver extends BroadcastReceiver {

    @Override public void onReceive(final Context context, Intent intent) {

        String action = intent.getAction();
        Log.v("PlugInControlReceiver","action: "+action);

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){

            if(action.equals("android.hardware.usb.action.USB_STATE")) {

                if(intent.getExtras().getBoolean("connected")){

                    Toast.makeText(context, "USB Connected", Toast.LENGTH_SHORT).show();
                }else{

                    Toast.makeText(context, "USB Disconnected", Toast.LENGTH_SHORT).show();
                }
            }
        } else {
            if(action.equals(Intent.ACTION_POWER_CONNECTED)) {

                Toast.makeText(context, "USB Connected", Toast.LENGTH_SHORT).show();
            }
            else if(action.equals(Intent.ACTION_POWER_DISCONNECTED)) {

                Toast.makeText(context, "USB Disconnected", Toast.LENGTH_SHORT).show();
            }
        }  
   }      
}