마스터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일 질문

답변 달기

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