我在 Android 市场上有一个应用程序,用户经常将他们的设备连接到计算机以将音乐添加到应用程序文件夹中。
我在说明书中特别指出,当启用USB连接模式时,Android应用程序无法与SD卡通信。显然这还不够愚蠢的证据。
有没有办法在java中检测USB是否已连接?我见过用广播接收器完成的,但这是一种非常愚蠢的方法。如果用户在连接到 USB 后启动应用程序,这将不起作用。一定有更好的方法。
这与此类似:检查 Android 上的 USB 连接状态
尽管他们确实使用了广播接收器。你说这是一种愚蠢的做事方式,但你能具体说明一下吗?
并非应用启动后检测不到。你需要做的就是把
<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
A1:您说“用户经常将设备连接到计算机以将音乐添加到应用程序文件夹中”,我猜您的意思是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 之前错过的 消息。