适用于 Android 的 USB 主机

2024-04-10

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.This is the photo of my freeduino board. It look exactly like this

我使用开发人员指南与设备进行了几个月的通信,但没有结果。我想我错过了其中的一些细节。我试图简单地显示我的 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:3​​5.364:W/Trace(1658):来自nativeGetEnabledTags的意外值:0 01-05 09:10:3​​5.364:W/Trace(1658):来自nativeGetEnabledTags的意外值:0 01-05 09:10:3​​5.464:W/Trace(1658):来自nativeGetEnabledTags的意外值:0 01-05 09:10:3​​5.464:W/Trace(1658):来自nativeGetEnabledTags的意外值:0 01-05 09:10:35.624:D/AndroidRuntime(1658):关闭虚拟机 01-05 09:10:3​​5.624:W / dalvikvm(1658):threadid = 1:线程因未捕获的异常而退出(组= 0x40a70930) 01-05 09:10:35.644:E/AndroidRuntime(1658):致命异常:主要 01-05 09:10:3​​5.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:3​​5.644:E / AndroidRuntime(1658):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 01-05 09:10:3​​5.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:3​​5.644:E / AndroidRuntime(1658):在android.app.ActivityThread.main(ActivityThread.java:5039) 01-05 09:10:3​​5.644:E / AndroidRuntime(1658):在java.lang.reflect.Method.invokeNative(本机方法) 01-05 09:10:3​​5.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:3​​5.644:E / AndroidRuntime(1658):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 01-05 09:10:3​​5.644:E / AndroidRuntime(1658):在dalvik.system.NativeStart.main(本机方法) 01-05 09:10:3​​5.644:E / AndroidRuntime(1658):引起:java.lang.NullPointerException 01-05 09:10:3​​5.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:3​​5.644:E / AndroidRuntime(1658):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 01-05 09:10:3​​5.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.0​​74:W/Trace(1712):来自nativeGetEnabledTags的意外值:0 01-05 09:10:46.0​​74: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


EDIT:如果在 XML 中定义,则实际上并不需要权限,因此下面的答案不适用。问题是 NPE - 代码中不存在这样的设备“deviceName”。


您似乎未获得使用 USB 配件的权限,如所述在文档中 http://developer.android.com/guide/topics/connectivity/usb/accessory.html#permission-a and in 这个答案 https://stackoverflow.com/a/11020806/832776.

In your onCreate():

UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
private static final String ACTION_USB_PERMISSION =
    "com.android.example.USB_PERMISSION";
...
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);

In your Activity:

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) {
                UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);

                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    if(accessory != null){
                        //call method to set up accessory communication
                    }
                }
                else {
                    Log.d(TAG, "permission denied for accessory " + accessory);
                }
            }
        }
    }
};

显示获取权限的对话框:

UsbAccessory accessory;
...
mUsbManager.requestPermission(accessory, mPermissionIntent);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 Android 的 USB 主机 的相关文章

  • Android:如何将自定义字段/操作添加到联系人详细信息

    我会将自定义操作添加到 Android 的系统联系方式中 例如 Viber 请参阅随附的屏幕截图 和其他消息应用程序 当用户单击此类自定义操作时 我的应用程序将进行处理 有什么帮助吗 我怀疑这是否像听起来那么容易 据我所知 您需要在设备上创
  • 如何在构建 Android 应用程序的发布版本之前删除所有调试日志记录调用?

    根据谷歌的说法 我必须 停用源代码中对 Log 方法的任何调用 在将我的 Android 应用程序发布到 Google Play 之前 摘自第 3 节出版清单 https developer android com studio publi
  • appcompat_v7 错误

    我发现材料支持库 更新的 appcompat v7 将于 10 月 17 日推出 http www reddit com r androiddev comments 2jd5gl roman nurik material support l
  • Kotlin 中的单例类

    我想知道如何在 Kotlin 中创建一个单例类 以便我的 Util 类在每次应用程序执行时仅实例化一次 但是 当我将 Java 类转换为 kotlin 时 生成了以下代码 它是否正确 companion object private var
  • Android 6 getAccountName() 缺少 android.permission.GET_ACCOUNTS

    在 Android 6 设备上运行时出现以下异常 java lang SecurityException Missing android permission GET ACCOUNTS 这看起来像是一个相当简单的例外 但对我来说并非如此 我
  • 在 CollapsingToolbarLayout 中设置 minHeight 没有任何效果

    我目前使用 CollapsingToolbarLayout 遇到的主要问题是 无论我尝试什么 工具栏的 minHeight 属性都没有任何效果 我想要的结果是这样的 CollapsingToolbarLayout 具有一定的展开高度和一定的
  • Onclick 不会在 CardView 上触发

    我有一个OnClickListener on a CardView 仅当我点击内容之外的区域 TextViews ImageViews 时 侦听器才起作用 我的内部也有一个线性布局CardView 我希望当我点击屏幕上的任意位置时它就能工作
  • Android、AdMob:AdMob 广告刷新会破坏帧速率

    我正在开发一款游戏 并且进展顺利 不过 我确实对 AdMob 广告刷新有一些疑问 每次刷新广告或绘制广告的不同方面时 我的帧速率都会急剧下降 几乎使游戏无法玩 这是我用于加载广告的内容 ad new AdView this AdSize B
  • 无法在 Android 模拟器上使用 ART

    我只是想在我的模拟器上尝试 android 4 4 的 ART 我所做的是创建一个模拟器 选择设备为 Nexus 7 目标为 Android 4 4 RAM 512 然后我启动模拟器并加载它 然后我进入开发者选项并选择运行时作为 ART 设
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • java.lang.RuntimeException:release()后调用的方法

    If i am 不使用 相机 release in 表面被破坏 then 无法从另一个 Activity 再次启动 CameraActivity 简而言之 得到不幸的是应用程序已停止 错误 即使不释放相机 但如果我确实点击了 主页 按钮 来
  • Android React-Native 中 MainActivity 不存在错误

    所以我收到 MainActivity 不存在错误 这可能是因为我将包和应用程序重命名为bomber to Bomber并将 appId 更改为com bomber to cool bomber android 我检查了 AndroidMan
  • 在多模块项目中访问绑定适配器

    我有一个多模块项目 其中应用程序模块包含我的绑定适配器 而我的功能模块取决于我的应用程序模块 因为它是动态功能模块 应用程序 包含绑定适配器 gt 动态功能模块 存在布局的地方 我在所有模块中启用了数据绑定和 kapt 我无法成功构建应用程
  • 将 espresso 与自定义 EditText 结合使用

    这是我的布局的一部分
  • Android 4 上的 html5 视频:全屏播放然后重定向到另一个网页 - 不起作用

    我正在为 Android 4 智能手机设计一个 html5 页面 其中包含一个 3gpp 或 mp4 视频 打开时必须自动全屏播放 当视频结束时应该重定向到另一个网址 一些谷歌搜索告诉我 Android 4 上不再允许自动播放 因此我选择显
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • 如何在Android中显示进度对话框?

    我想展示ProgressDialog当我单击 登录 按钮时 需要一些时间才能移动到另一个页面 我怎样才能做到这一点 ProgressDialog pd new ProgressDialog yourActivity this pd setM
  • 按照说明后“找不到您尝试购买的商品”

    所以我按照以下说明进行操作http developer android com google play billing billing admin html http developer android com google play bi
  • 有什么方法可以禁用/覆盖 Galaxy Tab 4 上的多任务按钮吗? [复制]

    这个问题在这里已经有答案了 我们编写了一个工业控制应用程序 并随我们的制造产品预装在三星 Galaxy 平板电脑上 我们使用的平板电脑是运行 Honeycomb 的 Tab 10 但我们无法再获得足够的 OEM 平板电脑 因此我们改用运行

随机推荐

  • 转换 boost::variant 类型的 std::vector

    我如何实现下面的函数来从矢量转换Value to a Container 我想断言 如果不是所有成员values属于相同类型 即向量包含字符串和整数的混合 这是因为该函数的返回值是std vector
  • 发布签名的 Android 应用程序,Google Plus 登录和 Google 地图无法正常工作

    1 我正在使用谷歌 登录 and 谷歌地图在我的android应用程序中 2 在调试应用程序时从Android Studio到真实设备 移动 Google plus登录和Google Map工作正常 一切正常 Problem 1 Build
  • 检查 Ember Handlebar If 块助手中的值是否等于

    我们如何检查值是否相等ember js http www emberjs com的 If 块助手 if person John 我们如何在车把上执行上述操作 The if helper 只能测试属性 不能测试任意表达式 因此 在这种情况下
  • 在nodeJs socket.io中,webstorm中的方法未解决

    我正在节点中学习socket io 并且我已经使用 安装了该模块 npm install socket io save 这是我的代码 var app require express var http require http Server
  • 使用 Maven 3 设置 Struts2 EAR 项目

    我正在迁移自Apache Ant Apache Ivy to Apache Maven用于新项目的生命周期管理 我从未在正式版本中使用过 Maven 所以我对此完全是新手 目前我已经安装并配置Maven 3 http maven apach
  • 静态变量与成员

    如果某个类的数据将被修改并且需要在整个程序中保留 但仅在一个成员函数中使用 那么最好将该变量设为其所在例程的局部静态变量 还是使其成为该例程的局部静态变量 班级成员 问题不是 数据将在整个程序中使用 而是 如果您创建此类的两个对象 您是否希
  • 使用 nltk 中的meteor_score模块评估模型时如何实现meteor分数?

    我目前有 2 个文件 reference txt 和 model txt 这两个文本文件包含原始字幕和训练后生成的字幕 我可以简单地执行以下操作来获取流星分数 score nltk translate meteor score meteor
  • 如何以MVVM模式加载wpf用户控件

    我正在创建一个采用 mvvm 模式的 wpf 用户控件 所以我们有 视图 代码隐藏文件中没有代码 视图模型 模型 数据访问文件 I have 主窗口 xaml 作为视图文件 我需要与之绑定主窗口模型 cs 通常 在 wpf 应用程序中 我们
  • pandas groupby 和rolling_apply 忽略NaN

    我有一个 pandas 数据框 我想计算列的滚动平均值 在 groupby 子句之后 但是 我想排除 NaN 例如 如果 groupby 返回 2 NaN 1 则结果应为 1 5 而当前它返回 NaN 我尝试了以下方法 但似乎不起作用 df
  • 如何将变量的值(字符串)设置为等于数组中的键?

    我有以下数组 var deckArray card1 rank suit card2 rank suit card3 rank suit card4 rank suit card5 rank suit card6 rank suit car
  • 如何在ArrayAdapter中的列表开头添加对象?

    ArrayAdapter 有方法add T object 在列表末尾添加一个对象 有没有办法在列表的开头添加对象 您可以使用 insert T object int index http developer android com refe
  • 从模板访问模型

    在玩 ember 时 我发现有时模型存储在控制器的content属性 有时模型也可以直接在控制器上使用 然而 当这种情况发生时 我不明白 让我用一个我在组装 ember MVC 时发现的例子来解释一下 设置 A 开始 我定义了一个自定义Me
  • 如何使调整 WPF 窗口大小时不那么“滞后”?

    我对 WPF 世界比较陌生 我立即注意到的一件事是 当您调整窗口大小时 窗口内容的绘制是多么滞后 例如 如果窗口边缘有滚动条 则这些滚动条在缩小时将部分隐藏 并且在放大时它们与窗口边框之间有空间 即使在 Visual Studio 中创建的
  • Drupal 6模块安装文件未在数据库中创建表

    我正在使用 Schema API 在 Drupa 6 17 上为我的模块创建表 但这些表并未在数据库中创建 我安装了架构模块 它告诉我 虽然我的模块的架构被识别 但它的表不在数据库中 它出现在 缺失 下 Tables in the sche
  • React Native - 设置 secureTextEntry 时无法更改字体

    const entryInput forwardRef props ref gt return
  • 从 url 获取子域名?

    我需要从 url 中获取一些值 就像如果网址是http www random mysite com 然后我想以某种方式得到random 但是如果使用的话这应该也有效www http or https 网址前面 那么如何才能做到这一点呢 我试
  • 如何使用 ORMLite 查询构建器获取表中的总记录

    如同 select count from tablename 在 ORMLITE 中应该查询什么 我尝试过类似的东西 int total dao queryBuilder select count 如何使用 ORMLite 查询构建器获取表
  • JavaScript .hashchange 性能。它能带来任何放缓吗?

    jQuery hashchange 事件 http benalman com projects jquery hashchange plugin 对我来说 它看起来是目前最成熟的解决方案 如果我错了 请纠正我 我真的很喜欢这个用于操作浏览器
  • Facebook Messenger 平台/机器人欢迎配置出现奇怪错误

    我在为 Messenger 机器人配置欢迎消息时遇到奇怪的错误 我一直在使用相同的代码 如下所示 直到昨晚它一直工作正常 我尝试了 cURL 和Postman https www getpostman com 它们都不起作用 curl X
  • 适用于 Android 的 USB 主机

    I am trying to communicate with my freeduino board which is similar to arduino uno via usb through android device nexus