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