2

私のアプリケーションでは、AndroidデバイスをUSBホストとして機能させる必要があります。USB接続デバイスとの間でデータを送受信する必要があります。Android Developers SiteでUSBHostを使用し、次のようにサンプルコードを開発しました。

Main.java

public class UsbDemoProjActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener( new OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "button click", 30).show();

                Intent it = new Intent(UsbDemoProjActivity.this,Second.class);
                startActivity(it);
            }
        });
    }
}

Second.java:

public class Second extends Activity{
    UsbDevice device;
    UsbManager mUsbManager;
    PendingIntent mPermissionIntent;
    private static String ACTION_USB_PERMISSION ="com.android.example.USB_PERMISSION";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        System.out.println("111111111");
        mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
        ACTION_USB_PERMISSION ="com.android.example.USB_PERMISSION";
        System.out.println("2222222222");
        HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
        device = deviceList.get("deviceName");
        System.out.println("33333333333");
        mPermissionIntent = PendingIntent.getBroadcast(this, 0, 
                                            new Intent(ACTION_USB_PERMISSION), 0);
        System.out.println("444444444444");
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        System.out.println("555555555555");
        registerReceiver(mUsbReceiver, filter);
        System.out.println("66666666666");
        mUsbManager.requestPermission(device, mPermissionIntent);
    }

    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            System.out.println("7777777777777");
            if (ACTION_USB_PERMISSION.equals(action)) {
                synchronized (this) {
                    System.out.println("88888888888");
                    UsbDevice device = (UsbDevice)intent.getParcelableExtra( 
                                                      UsbManager.EXTRA_DEVICE);

                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        if(device != null){
                            System.out.println("99999999999999");
                            //call method to set up device communication
                        }
                    } else {
                        //Log.d(TAG, "permission denied for device " + device);
                        System.out.println("permission denied for device" + device);
                    }
                }
            }
        }
    };
}

ただし、Main.javaページのボタンをクリックすると、次のようなエラーが表示されます。

残念ながら、USBDemoProjは停止されました

以下の画像のようにlogcatにエラーが表示されますが、ここではSecond.javaクラスsystem.output()で宣言されている行が表示されています。誰かが私のアプリのエラーを教えてもらえますか?

また、サンプルコードで正しい方法を使用して、USBホストモードでデバイスにアクセスしていますか?誰かが私にもっと良い方法を提案できますか?

ここに画像の説明を入力してください

4

1 に答える 1

0

シリアル デバイスと通信するために slickdev ライブラリを使用しているため、コードがよくわかりません。onDataReceived() じゃないの?それは図書館の機能かもしれませんが...

マニフェストには両方ともこれが含まれている必要があります。

    <uses-feature android:name="android.hardware.usb.host" android:required="true"></uses-feature>

そして

    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
            android:resource="@xml/device_filter" />
于 2012-08-30T18:25:02.240 に答える