Frage Android: USB erkennen


Gibt es eine Möglichkeit (programmgesteuert) in Ihrer Aktivität / Anwendung, dass der Benutzer Ihr Telefon über USB mit dem PC verbunden hat?


13
2018-01-05 04:45


Ursprung


Antworten:


Einige Leute haben vorgeschlagen, zu verwenden UMS_CONNECTED Das ist ab der letzten Version von Android veraltet Das andere Problem dabei ist, dass es nicht mit MTP-fähigen Geräten funktioniert

Andere schlugen den Gebrauch des. Vor BatteryManager, etwas präziser ACTION_BATTERY_CHANGED ebenso gut wie BATTERY_PLUGGED_AC und BATTERY_PLUGGED_USB Dies ist perfekt, wenn Sie den Akku- oder Ladestatus des Geräts erkennen möchten, aber kein wirklich guter Indikator für eine USB-Verbindung ist. Die Verwendung des Batteriemanagers ist auf älteren Android-Tablets wie dem XOOM, dem ICONIA-Tab A510 und den älteren Asus-Tablets anfällig.

Um zu erkennen, dass das Gerät an einen PC angeschlossen wurde, können Sie: Benutzen android.hardware.usb.action.USB_STATE und connected anstelle der BatteryManager Sachen

Codebeispiel

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

Hoffe das hilft


34
2017-07-19 20:26



In der Lage war, eine USB-Verbindung zu erkennen, indem ein Broadcast-Empfänger registriert wurde,

IntentFilter mIntentFilter = neuer IntentFilter (Intent.ACTION_UMS_CONNECTED);

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


5
2018-01-05 06:31



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")) {...}
}

5
2018-03-27 18:01



Wenn Sie nur feststellen möchten, ob Sie Zugriff auf die SD-Karte haben, funktioniert Folgendes:

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
2017-09-13 12:06



Das Hauptproblem beim Überprüfen android.intent.action.ums_connected Geräte, die das MTP-Protokoll verwenden (wie das Samsung Nexus Galaxy), empfangen diese Übertragung nicht.

Aus diesem Grund verwende ich einen anderen Weg, um zu erkennen, wenn das Smartphone eingesteckt oder nicht angeschlossen ist:

Ich überprüfe den Zustand der Batterie. Es wird eine Absicht genannt ACTION_BATTERY_CHANGED wenn ein Ereignis auf der Batterie passiert. In dieser Absicht gibt es einige zusätzliche Felder, die einige Informationen enthalten. Einer von ihnen ist 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.

Die anderen Konstanten sind BATTERY_PLUGGED_AC und BATTERY_PLUGGED_USB

Mit dieser Sendung können Sie also feststellen, ob das Smartphone USB angeschlossen hat, auch wenn es das MTP-Protokoll verwendet.

Um zu wissen, ob das Smartphone nicht angeschlossen ist, müssen Sie überprüfen, wann EXTRA_PLUGGED Wert ändert sich von BATTERY_PLUGGED_USB zu 0


3
2017-08-07 13:05