I am trying to communicate with my freeduino board which is similar to arduino uno via usb through android device 'nexus 7' which has 4.2 (jelly beans) in it.
我使用开发人员指南与设备进行了几个月的通信,但没有结果。我想我错过了其中的一些细节。我试图简单地显示我的 freeduino 板的供应商 ID。我的清单文件如下所示。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.usb_host_final_try"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.usb_host_final_try.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" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
我在 res/xml 目录中创建了一个文件 device_filter 。看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device vendor-id="0403" product-id="07d7" />
</resources>
我的 MainActivity.java 有以下代码。
package com.example.usb_host_final_try;
import java.util.HashMap;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.os.Build;
import android.os.Bundle;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
UsbDevice device = deviceList.get("deviceName");
int vid=device.getVendorId();
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(Integer.toString(vid));
}
请帮助我,过去几个月我已经搞砸了。我已经尝试这样做,但它也不起作用。
link http://code.google.com/p/usb-serial-for-android/
link http://android.serverbox.ch/?p=549
堆栈溢出问题 https://stackoverflow.com/questions/12110555/how-to-detect-usb-device-in-android-tablet-which-acts-as-usb-host
堆栈溢出问题 https://stackoverflow.com/questions/11773561/putting-an-android-device-in-usb-host-mode
我已经尝试了所有这些,但仍然没有成功。我还尝试使用 if else 循环来查看枚举是否有效,如果没有设备,则将文本设置为未找到设备,否则将 settext 设置为供应商 ID。在模拟器上显示未找到设备,但在我的平板电脑上,当我连接设备时,它会强制关闭,否则它仍然显示未找到任何设备,但未连接任何设备。
堆栈跟踪在这里..
01-05 09:10:35.364:W/Trace(1658):来自nativeGetEnabledTags的意外值:0
01-05 09:10:35.364:W/Trace(1658):来自nativeGetEnabledTags的意外值:0
01-05 09:10:35.464:W/Trace(1658):来自nativeGetEnabledTags的意外值:0
01-05 09:10:35.464:W/Trace(1658):来自nativeGetEnabledTags的意外值:0
01-05 09:10:35.624:D/AndroidRuntime(1658):关闭虚拟机
01-05 09:10:35.624:W / dalvikvm(1658):threadid = 1:线程因未捕获的异常而退出(组= 0x40a70930)
01-05 09:10:35.644:E/AndroidRuntime(1658):致命异常:主要
01-05 09:10:35.644:E / AndroidRuntime(1658):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.usb_host_final_try / com.example.usb_host_final_try.MainActivity}:java.lang.NullPointerException
01-05 09:10:35.644:E / AndroidRuntime(1658):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-05 09:10:35.644:E / AndroidRuntime(1658):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-05 09:10:35.644: E/AndroidRuntime(1658): 在 android.app.ActivityThread.access$600(ActivityThread.java:141)
01-05 09:10:35.644: E/AndroidRuntime(1658): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-05 09:10:35.644: E/AndroidRuntime(1658): 在 android.os.Handler.dispatchMessage(Handler.java:99)
01-05 09:10:35.644: E/AndroidRuntime(1658): 在 android.os.Looper.loop(Looper.java:137)
01-05 09:10:35.644:E / AndroidRuntime(1658):在android.app.ActivityThread.main(ActivityThread.java:5039)
01-05 09:10:35.644:E / AndroidRuntime(1658):在java.lang.reflect.Method.invokeNative(本机方法)
01-05 09:10:35.644:E / AndroidRuntime(1658):在java.lang.reflect.Method.invoke(Method.java:511)
01-05 09:10:35.644: E/AndroidRuntime(1658): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-05 09:10:35.644:E / AndroidRuntime(1658):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-05 09:10:35.644:E / AndroidRuntime(1658):在dalvik.system.NativeStart.main(本机方法)
01-05 09:10:35.644:E / AndroidRuntime(1658):引起:java.lang.NullPointerException
01-05 09:10:35.644:E / AndroidRuntime(1658):在com.example.usb_host_final_try.MainActivity.onCreate(MainActivity.java:35)
01-05 09:10:35.644: E/AndroidRuntime(1658): 在 android.app.Activity.performCreate(Activity.java:5104)
01-05 09:10:35.644:E / AndroidRuntime(1658):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-05 09:10:35.644:E / AndroidRuntime(1658):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-05 09:10:35.644: E/AndroidRuntime(1658): ... 11 更多
01-05 09:10:46.074:W/Trace(1712):来自nativeGetEnabledTags的意外值:0
01-05 09:10:46.074:W/Trace(1712):来自nativeGetEnabledTags的意外值:0
01-05 09:10:46.754:D/AndroidRuntime(1712):关闭虚拟机
01-05 09:10:46.754:W/dalvikvm(1712):threadid = 1:线程因未捕获的异常而退出(组= 0x40a70930)
01-05 09:10:46.766: E/AndroidRuntime(1712): 致命异常: main
01-05 09:10:46.766:E / AndroidRuntime(1712):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.usb_host_final_try / com.example.usb_host_final_try.MainActivity}:java.lang.NullPointerException
01-05 09:10:46.766:E / AndroidRuntime(1712):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-05 09:10:46.766:E / AndroidRuntime(1712):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-05 09:10:46.766: E/AndroidRuntime(1712): 在 android.app.ActivityThread.access$600(ActivityThread.java:141)
01-05 09:10:46.766: E/AndroidRuntime(1712): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-05 09:10:46.766: E/AndroidRuntime(1712): 在 android.os.Handler.dispatchMessage(Handler.java:99)
01-05 09:10:46.766:E / AndroidRuntime(1712):在android.os.Looper.loop(Looper.java:137)
01-05 09:10:46.766:E / AndroidRuntime(1712):在android.app.ActivityThread.main(ActivityThread.java:5039)
01-05 09:10:46.766:E / AndroidRuntime(1712):在java.lang.reflect.Method.invokeNative(本机方法)
01-05 09:10:46.766:E / AndroidRuntime(1712):在java.lang.reflect.Method.invoke(Method.java:511)
01-05 09:10:46.766: E/AndroidRuntime(1712): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-05 09:10:46.766:E / AndroidRuntime(1712):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-05 09:10:46.766:E / AndroidRuntime(1712):在dalvik.system.NativeStart.main(本机方法)
01-05 09:10:46.766:E / AndroidRuntime(1712):引起:java.lang.NullPointerException
01-05 09:10:46.766:E / AndroidRuntime(1712):在com.example.usb_host_final_try.MainActivity.onCreate(MainActivity.java:35)
01-05 09:10:46.766:E / AndroidRuntime(1712):在android.app.Activity.performCreate(Activity.java:5104)
01-05 09:10:46.766:E / AndroidRuntime(1712):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-05 09:10:46.766:E / AndroidRuntime(1712):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-05 09:10:46.766: E/AndroidRuntime(1712): ... 11 更多
01-05 09:10:49.104:I/Process(1712):发送信号。 PID:1712 SIG:9