마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

USB host 기능으로 숫자를 받아서 화면에 띄우려고 하는데 에러가 납니다

0 추천

안녕하세요

C로 마이크로프로세서에 프로그래밍은 해본 적이 있는데, java는 처음인 초보입니다.

일단 급하게 앱이 필요해서 간단한 예제들 몇 가지 따라해보고, 부랴부랴 구글 USB host 개발자 페이지를 보고 코드를 짜맞췄는데, 작동을 하지 않습니다.

micro 5pin 단자에 USB 케이블로 아두이노와 같은 프로세서를 사용하는 보드와 연결한 후, 보드에서 보내주는 숫자를 화면에만 띄울 수 있으면 됩니다. (아두이노를 사용하지는 않습니다)

device를 스마트폰과 연결한 후, 어플리케이션에서 장치가 연결됐는 지 확인, 그리고 permission을 받은 다음 데이터를 주고받는 순서로 동작하는 것은 알겠습니다만, 구체적으로 코드에 어떤 부분이 문제인 지를 잘 모르겠습니다.

도움을 부탁드립니다

 

package com.example.usb_test;
 
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
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.util.Log;
import android.view.Menu;
import android.widget.TextView;
 
public class MainActivity extends Activity {
 
    TextView display;
    Intent intent = getIntent();
    private PendingIntent mPermissionIntent;
    private static final String TAG = "USB,MainActivity";
    private byte[] bytes;
    private static int TIMEOUT = 0;
    private boolean forceClaim = true;
     
     
    UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
    UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
     
    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) {
                String action = intent.getAction();
                if (ACTION_USB_PERMISSION.equals(action)) {
                    synchronized (this) {
                        UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
 
                        if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                            if(device != null){
                                //call method to set up device communication
                           }
                        }
                        else {
                            Log.d(TAG, "permission denied for device " + device);
                        }
                    }
                }
            }
        };
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        display = (TextView) findViewById(R.id.num_display);
         
        mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        registerReceiver(mUsbReceiver, filter);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    public void run(){
         
        int num = 0;
        UsbInterface intf = device.getInterface(0);
        UsbEndpoint endpoint = intf.getEndpoint(1);
         
        UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
         
        UsbDeviceConnection connection = mUsbManager.openDevice(device);
        connection.claimInterface(intf, forceClaim);
        num = connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT);
         
        display.setText("Number is " + num);
    }
     
}

 

후야 (120 포인트) 님이 2013년 12월 10일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...