8
Android-app에서 PC로 USB를 통해 데이터를 전송하는 앱을 만들고 싶습니다.Android 앱에서 USB를 통해 PC로 데이터를 보내십시오.
package com.sample.dummy.app.senddatathoughserialport;
import java.io.UnsupportedEncodingException;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbDevice;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tv = (TextView)findViewById(R.id.multiAutoCompleteTextView1);
Button sButton = (Button) findViewById(R.id.button1);
final UsbManager manager = (UsbManager) this.getSystemService(Context.USB_SERVICE);
Toaster(""+manager);
// -- register click event with first button ---
sButton.setOnClickListener(new View.OnClickListener()
{
@SuppressWarnings({ "unused" })
public void onClick(View v)
{
try
{
Intent intent = new Intent("android.hardware.usb.action.USB_DEVICE_ATTACHED");
UsbDevice mDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.ACTION_USB_DEVICE_ATTACHED);
Toaster(""+mDevice);
final UsbDeviceConnection connection = manager.openDevice(mDevice);
UsbInterface usbIf = null;
Toaster("Its ok here 1");
int count = mDevice.getInterfaceCount();
Toaster("Its ok here 1");
for(int i=0; i< count; i++)
{
usbIf = mDevice.getInterface(i);
}
UsbEndpoint epIN = null;
UsbEndpoint epOUT = null;
Toaster("It's ok here 2");
for (int i = 0; i < usbIf.getEndpointCount(); i++)
{
if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK)
{
if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN)
epIN = usbIf.getEndpoint(i);
else
epOUT = usbIf.getEndpoint(i);
}
else
{
Log.d("USB","Not Bulk");
Toaster("Thedaa log daggara");
}
}
String get = tv.getText().toString();
try
{
byte[] str = get.getBytes(get);
connection.bulkTransfer(epOUT, str, str.length, 500);
}
catch (UnsupportedEncodingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
Toaster("Data sending failed!");
}
finally
{
Toaster("Data sent through USB !");
}
}
catch(Exception e)
{
Log.d("Failed", e.toString());
Toaster("Attempt Failed !!");
}
}
});
}
@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 Toaster(String string)
{
Toast.makeText(this, string,Toast.LENGTH_LONG).show();
}}
을 그리고 내 Android
Manifest Xml
파일은 다음과 같다 : 항상 null
의 값을 보여줍니다 내가 UsbDevice mDevice;
으로 문제를 얻고있다
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.sample.dummy.app.senddatathoughserialport"
android:versionCode="1"
android:versionName="1.0" >
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="12" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.sample.dummy.app.senddatathoughserialport.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
android:resource="@xml/device_filter" />
</activity>
</application></manifest>
을 나에게 그것을 확인하기 위해 조수를주십시오 다음과 같이 내 코드는 성공적인 앱.
나는 당신에게 피드백을 줄 것입니다. – Dineshgaru
또한 adb가 자동으로 자체 드라이버로 시작하므로 PC와 통신 할 수 있는지 잘 모릅니다. 어쩌면 당신이 adb없이 PC에 시도하고 사용자 정의 드라이버와 함께 할 수 있습니다. – DaviF