如何检查android上是否启用了USB连接模式?

时间:2012-01-10 02:18:05

标签: android usb connect

我在Android市场上有一个应用程序,用户经常将他们的设备连接到他们的计算机,以将音乐添加到apps文件夹中。我在说明书中明确指出,启用USB连接模式时,Android应用程序无法与SD卡通信。显然这不是愚蠢的证据。有没有办法在java中检测USB是否已连接?我已经看到它完成了广播接收器,但这是一种愚蠢的方式来做到这一点。如果用户在连接USB后启动应用程序,则无法使用此功能。必须有更好的方法。

2 个答案:

答案 0 :(得分:2)

这类似于: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

答案 1 :(得分:1)

A1:你说过“用户经常将他们的设备连接到他们的计算机上以便将音乐添加到apps文件夹中”,我想你的意思是说Sd卡已经以MassStorage模式连接到PC,你可以将其检查为以下内容:

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

相关问题