2012-04-18 130 views
0

我想在我的android应用程序中弹出一个usb设备连接和分离时的敬酒..
短 - 它不工作..有人可以告诉我我失踪了吗?试图三星硬键盘连接到samasung平板电脑,并有我的应用程序检测到它在安装或取下检测USB设备android

我的活动

import java.util.ArrayList; 
    import java.util.HashMap; 

    import com.eliddell.R; 
    import android.app.Activity; 
    import android.app.PendingIntent; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.IntentFilter; 
    import android.content.res.Configuration; 
    import android.hardware.usb.UsbAccessory; 
    import android.hardware.usb.UsbDevice; 
    import android.hardware.usb.UsbManager; 
    import android.location.GpsStatus.Listener; 
    import android.mtp.MtpDevice; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.inputmethod.InputMethodManager; 
    import android.widget.Toast; 

    public class UiModeTestActivity extends Activity { 
     /** Called when the activity is first created. */ 
     //UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      String str = (String) getLastNonConfigurationInstance(); 

      IntentFilter filter = new IntentFilter("android.hardware.usb.action.USB_ACCESSORY_ATTACHED"); 
registerReceiver(mUsbReceiver, filter); 

     } 


     private static final String ACTION_USB_PERMISSION ="com.android.example.USB_PERMISSION"; 
     private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 

      public void onReceive(Context context, Intent intent) { 
       Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT).show(); 
       String action = intent.getAction(); 
       if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) { 
        UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); 
        Toast.makeText(getApplicationContext(), "attached", Toast.LENGTH_SHORT).show(); 
       } 
       if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(action)) { 
        UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); 
        Toast.makeText(getApplicationContext(), "detached", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }; 

    }; 

我的清单:

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk android:minSdkVersion="12" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 

    > 
    <uses-library android:name="com.android.future.usb.accessory" /> 
    <activity 
     android:name=".UiModeTestActivity" 
     android:configChanges="keyboard|uiMode|orientation" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" 
      android:resource="@xml/accessory_filter" /> 
    </activity> 

</application> 

+0

你有没有得到一些解决方案,你可以分享? – 2013-02-14 23:46:21

回答

2

EDIT2:

想如果我没有记错的三星硬键盘连接到三星平板

:问题是,键盘是不是一个USB Acessory,因此应不会触发USB_ACCESSORY_ATTACHED部分。

忘记下面:)


部分尝试

IntentFilter filter = new IntentFilter("android.hardware.usb.action.USB_ACCESSORY_ATTACHED"); 
registerReceiver(mUsbReceiver, filter); 

更换

UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 
//final String ACTION_USB_PERMISSION ="com.android.example.USB_PERMISSION"; 

PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); 
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); 
registerReceiver(mUsbReceiver, filter); 

,并删除

<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> 

您正在混淆具有广播意图的权限。

编辑:很可能这是完全错误的:http://developer.android.com/guide/topics/usb/accessory.html做你所做的。

+0

我做了您的更改,但仍然没有任何结果。 – erik 2012-04-18 18:16:06

+1

请参阅顶部的“新”答案。配件有些特别,我想你的键盘没有配件(它需要有电池/电源本身),所以你什么也得不到。 – zapl 2012-04-18 18:19:22