2013-06-03 2 views
1

USB 플러그가 뽑혀있을 때 실행중인 서비스를 중지하려고합니다.USB 장치가 분리되었을 때 서비스 중지

내 활동 onCreate 내부에 나는뿐만 아니라 호출되고있는 다른 intent filter

 <intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> 
     </intent-filter> 

그리고이 intent filter이 그 action

if (getIntent().getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) { 
     Log.d(TAG, "************** USB unplugged stopping service **********"); 
     Toast.makeText(getBaseContext(), "usb was disconneced", Toast.LENGTH_LONG).show(); 
     stopService(new Intent(this, myService.class)); 
    } else { 
     init(); 
    } 

을 위해 그리고 내 manifest 내부의 의도를 확인합니다.

 <intent-filter> 
      <category android:name="android.intent.category.DEFAULT" /> 

      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
     </intent-filter> 

그러나 분리가 호출되지 않습니다.

답변

4

당신은 USB 디바이스가 (케이블이 아닌) 전화/태블릿으로부터 분리 될 때

BroadcastReceiver receiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) { 
       Log.d(TAG, "************** USB unplugged stopping service **********"); 
       Toast.makeText(getBaseContext(), "usb was disconneced", 
        Toast.LENGTH_LONG).show(); 
        stopService(new Intent(this, myService.class)); 
      } 
     }; 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); 
    registerReceiver(receiver, filter); 
+0

이 좋아,하지만 활동이있을 때 어떤 일이 발생 백그라운드에서, 또는 파괴되고 있습니까? – user1940676

+1

수신자를 서비스에 등록하십시오.) – Dediqated

+0

활동에서 브로드 캐스트 리시버를 시작하지 않으려면 AndroidManifest.xml에 정의하십시오. – msh

5

흠 .. ACTION_USB_DEVICE_DETACHED가 실행되어 브로드 캐스트 리시버를 등록 할 필요가있다. 이것은 당신이 원하는 어떤 것이 아닙니다.

USB 케이블 연결을 감지하는 간단한 API가 있는지 모르겠지만 ACTION_POWER_CONNECTEDACTION_POWER_DISCONNECTED을 사용하여 목표를 달성 할 수 있습니다. 수신기에 대한 필터 다음

사용 :

<intent-filter> 
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> 
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> 
</intent-filter> 

그리고 당신의 수신기를, 당신은 상태를 확인하고 원하는 로직을 구현할 수 있습니다

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     switch(intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)) { 
      case 0: 
       // The device is running on battery 
       break; 
      case BatteryManager.BATTERY_PLUGGED_AC: 
       // Implement your logic 
       break; 
      case BatteryManager.BATTERY_PLUGGED_USB: 
       // Implement your logic 
       break; 
      case BATTERY_PLUGGED_WIRELESS: 
       // Implement your logic 
       break; 
      default: 
       // Unknown state 
     } 
    } 
} 
+0

broadcastreceiver 클래스에서 실행중인 서비스를 중지하려면 어떻게합니까? ?? 그리고 나는 USB 장치를 호스트로 운영하고있다. – user1940676

+0

stopService()를 사용하십시오. – ozbek

+0

감사합니다. 매개 변수로 전달 된 컨텍스트를 놓쳤지만 분리 된 장치도 호출됩니다. – user1940676

관련 문제