2012-01-10 77 views
2

我在android市場上有一個應用程序,用戶經常將他們的設備連接到他們的計算機上,以將音樂添加到應用程序文件夾中。我已經在說明中明確指出,在USB連接模式啓用時,android應用程序無法與SD卡進行通信。顯然這並不足以證明這一點。有沒有辦法在java中檢測USB是否連接?我已經看到它用廣播接收機完成了,但這是一個愚蠢的做法。如果用戶在連接到USB後啓動應用程序,這將不起作用。有一個更好的方法。如何檢查USB連接模式是否在android上啓用?

回答

1

這是與此類似:Check USB Connection Status on Android

雖然他們利用廣播接收機。你說這是一個愚蠢的做事方式,但你能更具體一些嗎?

在應用程序啓動後,您不能檢測到它。什麼,你需要做的是把

<intent-filter> 
<action android:name="android.intent.action.ACTION_UMS_CONNECTED"/> 
<action android:name="android.intent.action.ACTION_UMS_DISCONNECTED"/> 

在AndroidManifest.xml中的<Receiver>條目下面的類下面:

public class IntentReceiver extends BroadcastReceiver { 

     @Override 

     public void onReceive(Context context, Intent intent) { 

       // TODO Auto-generated method stub 

       if(intent.getAction().equals(Intent.ACTION_UMS_CONNECTED)){ 

         Toast.makeText(context, "mounted", Toast.LENGTH_LONG).show(); 

         Intent myStarterIntent = new Intent(context, tst.class); 

         myStarterIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

         context.startActivity(myStarterIntent); 

       } 

     } 

} 

`

來源引:http://www.anddev.org/start_activity_on_usb_connect-t8814.html

+0

「這是不是說你不能檢測到它的應用程序啓動後的情況。」我的意思與你所說的相反。只有在USB連接或斷開連接時纔會收到廣播,因此如果您在這些操作之間啓動應用程序,則無法確定連接與否。 – NJGUY 2012-01-10 03:07:07

1

A1:你說「用戶經常把他們的設備連接到他們的電腦上,把音樂添加到應用程序文件夾中」,我想你的意思是說,Sd ca RD已連接到PC的MassStorage模式下,你可以檢查此如下:

String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_SHARED.equals(state)) { 
    // Sd card has connected to PC in MSC mode 
} 

A2:你說:「如果用戶連接USB後啓動應用這樣可不行」,我不同意和你在一起,在ICS,你可以註冊一個接收器收聽android.hardware.action.USB_STATE變化,由系統廣播的意圖是在STICKY模式,這就是說,即使在您的應用程序接收器USB電纜連接後註冊,你也可以得到這個消息:

Intent intent = context.registerReceiver(...); 
if (intent != null) { 
    boolean isConnected = intent.getBooleanExtra(USB_CONNECTED, false); 
    boolean isMscConnection = intent.getBooleanExtra(USB_FUNCTION_MASS_STORAGE, false); 
} 

上述方法返回的意圖消息在將USB電纜連接到PC之前,您錯過了。

參閱下面的鏈接瞭解詳細信息: http://www.androidadb.com/source/toolib-read-only/frameworks/base/core/java/android/hardware/usb/UsbManager.java.html