2017-10-27 1 views
1

Ich habe die Android-Anwendung erstellt, die Sätze Text "mtp" zu Textview sagt, wenn USB mit PC verbunden ist oder Text "Ladegerät" auf Textansicht setzt, wenn USB mit dem Ladegerät verbunden ist. Ich benutzte broadcastreceiver für USB-Kabelerkennung! Wenn ich die Anwendung auf dem Telefon laufen lasse und das USB-Kabel an den PC oder das Ladegerät anschließe passiert nichts, es wird nur keine gedruckt! Wo ist das Problem?Kann USB-Kabel auf meinem Handy nicht erkennen Anwendung

public class Receiver extends BroadcastReceiver 
{ 
    Intent intent; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     intent = new Intent("check"); 

     if(intent.getAction().equalsIgnoreCase("android.hardware.usb.action.USB_STATE")) 
     { 
      intent.putExtra("MTP", true); 
      context.sendBroadcast(intent); 
     } 
     else if (intent.getAction().equals("android.intent.action.ACTION_POWER_CONNECTED")) 
     { 
      intent.putExtra("isChargerConnected", true); 
      context.sendBroadcast(intent); 
     } 
     else 
     { 
      intent.putExtra("isCableConnected", false); 
      context.sendBroadcast(intent); 
     } 
    } 
} 

public class MainActivity extends AppCompatActivity 
{ 
    private TextView cable; 
    BroadcastReceiver broadcastReceiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     cable = (TextView) findViewById(R.id.cable); 

     broadcastReceiver = new BroadcastReceiver() 
     { 
      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       if (intent != null && intent.getAction().equals("check")) 
       { 
        Bundle bundle = intent.getExtras(); 
        if (bundle != null && bundle.containsKey("MTP")) 
        { 
         boolean isUSBConnected = bundle.getBoolean("MTP"); 

         if(isUSBConnected) 
          cable.setText("MTP"); 
        } 
        if (bundle != null && bundle.containsKey("isChargerConnected")) 
        { 
         boolean isChargerConnected = bundle.getBoolean("isChargerConnected"); 

         if(isChargerConnected) 
          cable.setText("Charger"); 
        } 
        if (bundle != null && bundle.containsKey("isCableConnected")) 
        { 
         boolean isCableConnected = bundle.getBoolean("isCableConnected"); 

         if(!isCableConnected) 
          cable.setText("None"); 
        } 
       } 
      } 
     }; 

     IntentFilter intentFilter = new IntentFilter("check"); 
     registerReceiver(broadcastReceiver, intentFilter); 
    } 

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

Antwort

0

können Sie versuchen, diesen Code

<activity 
... 
android:launchMode="singleTask"> 

und

@Override 
protected void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 
if(intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) 
{ 
    UsbDevice device = 
(UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
+0

Ich habe Android: launchMode = "singleTask" zu MainActivity aber immer noch nur "None" angezeigt! – Pavle

+0

Immer noch das gleiche Problem! – Pavle

+0

Sie sollten auf jeden Fall einen Einblick hinzufügen, warum das funktioniert. _try this_ ist selten eine gut genug Antwort. – scharette

0

Prüfen Sie zunächst, ob das Gerät (USB oder AC) geladen wird unter Verwendung des Codes:

public boolean isDeviceCharging(){ 
    return myBatteryManager.isCharging(); 
} 

Überprüfen Sie dann, ob entweder ein USB-Kabel oder ein Wechselstromkabel angeschlossen ist Ladegerät, indem Sie den Code unten verwenden:

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

private boolean checkACCharger() 
{ 
    int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
    chargePercentage = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
    acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 
    return acCharge; 
} 

Sie können auch den Prozentsatz der Batterieladung erhalten, indem Sie die Funktion unter Verwendung von:

public int getBatteryCharge() { 
    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
    Intent batteryStatus = context.registerReceiver(null, ifilter); 
    int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
    return level; 
} 

PS: Die BatteryManager.isCharging() -Methode kann für API verwendet werden Level 23 ab

Verwandte Themen