2012-01-10 7 views
2

У меня есть приложение на рынке Android, и пользователи часто подключают свои устройства к своим компьютерам, чтобы добавить музыку в папку приложений. Я специально указал в инструкциях, что приложения для Android не могут связываться с SD-картой, пока включен режим подключения USB. По-видимому, это недостаточно глупо. Есть ли способ обнаружить в 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

1

A1: Вы сказали, что «пользователи часто подключают свои устройства к своим компьютерам, чтобы добавить музыку в папку приложений», я думаю, вы имеете в виду, что Sd ca го был подключен к компьютеру в режиме 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 к ПК.

см ссылку ниже для деталей: http://www.androidadb.com/source/toolib-read-only/frameworks/base/core/java/android/hardware/usb/UsbManager.java.html