8
我想创建一个应用程序通过USB从Android应用程序发送数据到PC。我的代码如下:通过USB从Android应用程序发送数据到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
文件如下:
<?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>
我越来越问题UsbDevice mDevice;
会始终显示的null
值。请给我助理,使它一个成功的应用。
我会检查并给你反馈。 – Dineshgaru
另外我不知道你是否可以与你的电脑沟通,因为ADB自动启动自己的驱动程序。也许如果你尝试一台没有adb的电脑并且使用自定义驱动程序,那么可以完成。 – DaviF