Android:检测USB

AjO*_*ire 15 usb android

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

小智 39

有些人建议使用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");
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


jma*_*tar 6

这对我有用。

将此添加到您的 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>
Run Code Online (Sandbox Code Playgroud)

并创建您的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();
            }
        }  
   }      
}
Run Code Online (Sandbox Code Playgroud)


AjO*_*ire 5

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

IntentFilter mIntentFilter = new IntentFilter(Intent.ACTION_UMS_CONNECTED);

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


Kar*_*oly 5

的Manifest.xml:

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.ums_connected" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

MyReceiver:

public class MyReceiver extends BroadcastReceiver{
if (intent.getAction().equalsIgnoreCase(
        "android.intent.action.UMS_CONNECTED")) {...}
}
Run Code Online (Sandbox Code Playgroud)


spe*_*ane 5

如果您只想检测是否有权访问 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;
    }
}
Run Code Online (Sandbox Code Playgroud)