每次重新连接USB设备时,如何让Android不要求许可?我想让它记住USB设备的"默认使用"复选标记,这样我就不必每次都给同一设备授予权限.
我以编程方式检测USB设备(Android手机)何时连接到我的主机设备(Android手机),以便我可以将它们切换到AOA模式并将它们用作附件.基本上我有两个Android手机和一个OTG电缆,我希望他们在彼此之间进行通信.
我有一个线程,不断枚举附加的USB设备:
UsbManager manager = (UsbManager)
context.getSystemService(Context.USB_SERVICE);
while (!m_stopRequested) {
boolean shouldNotify = false;
HashMap<String, UsbDevice> deviceMap = m_usbManager.getDeviceList();
for (Entry<String, UsbDevice> entry : deviceMap) {
UsbDevice device = entry.getValue();
if (m_usbManager.hasPermission(device)) {
int pid = device.getProductId();
if (device.getVendorId() == VID_GOOGLE(0x18D1) && (pid == ACCESSORY_PID(0x2D01) || pid == ACCESSORY_PID_ALT(0x2D00))) {
switchDeviceToAOAMode(device);
}
} else {
m_usbManager.requestPermission(device);
}
}
Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
我还注册了BroadcastReceiver以接收USB_PERMISSION意图:
private final class USBReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
MCSLogger.log(TAG, "Received permission result!"); …
Run Code Online (Sandbox Code Playgroud) 当连接到USB配件时,我正在努力恢复我的Android应用程序.
显然我的ParcelFileDescriptor
是null,openAccessory()
当我调用它时,该方法不会返回任何内容onResume()
.
有人经历过那个吗?
我一直在玩 Android Open Accessory Development Kit。通过遵循Google 提供的 DemoKit 示例,我可以轻松地将解决方案适应我的应用程序。我可以很好地检测、通信和分离附件。
但是,我需要将整个事情作为服务运行。我有一个由 USB_ACCESSORY_ATTACHED 意图启动的基本活动(即,当附件连接时),并且工作正常。但是,一旦我启动我的服务并在其中运行与常规活动中的工作解决方案相同的代码,IOException
每当我尝试与配件通信(监控 arduino 端)时,我都会收到一个(“没有这样的设备”)显示成功的 USB 连接)。即使我在服务中指定了正确的 BroadcastReceiver,在 onStartCommand 回调方法中注册它,并使用openAccessory()
. 相关代码如下。
@Override
public void onCreate() {
Log.d(TAG, "ONCREATE");
manager = UsbManager.getInstance(this);
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
ACTION_USB_PERMISSION), 0);
// Register broadcastreceiver for filtering accessory events
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
registerReceiver(mUsbReceiver,filter);
super.onCreate();
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "ONSTARTCOMMAND METHOD ACCESSED");
if (mInputStream != null && …
Run Code Online (Sandbox Code Playgroud) 根据iOS6以后的EAAccessoryManager类参考使用showBluetoothAccessoryPickerWithNameFilter,我们可以显示一个附件选择器,它将帮助用户连接外部附件,包括iAP over Bluetooth唯一ID.
现在我们想要以编程方式连接该列表中的一个外部附件.
我们需要您的支持.
我们如何以编程方式连接手机范围内的任何外部设备?
如何在没有用户交互的情况下以编程方式连接任何外部设备?
我们如何以编程方式获得用户手机范围内的外部设备列表?
我们如何获得范围内但未连接的外部设备的EAAccessory对象列表?
我们可以在NSUserDefaults中存储EAAccessory对象吗?如果是的话,我们怎么做?由于EAAccessory EAAccessory未实现encodeWithCoder和initWithCoder方法,因此它不允许将其存储到NSUserDefaults中.
使用BTLE我们可以解决这个问题,但我们想要BT Classic中的解决方案.
我正在尝试构建一个与外部附件通信的应用程序(通过蓝牙).为了确保应用程序是用户友好的,我希望他不要去设置连接附件,而是显示iOS 6.0包含的附件选择器.
要实现这一目标,请简单地致电:
[[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:nil completion:nil];
Run Code Online (Sandbox Code Playgroud)
现在,我没有使用过滤器和完成(根据iOS类参考,两者都可以是nil ) - 即使我也尝试过使用它们.
现在问题是我的配件出现2到10秒然后从列表中消失,直到我取消弹出窗口并再次显示它.另一个问题是有时它根本没有出现.我还确保设备已配对但未连接.
我尝试使用另一个配件(我自己没有制作的配件)和不同的设备(iPhone 4,4S,5 - iPad - iPod Touch)没有成功.
有没有人有类似的问题?如果是的话你是怎么解决的?这是一个iOS错误吗?这是一个附件错误吗?
谢谢你的回复.
我正在尝试学习Android USB主机/附件连接.我读Android设备可以行为usb主机或USB配件.因此我创建了两个项目,其中一个是usb主机项目,另一个是usb附件项目.我将这些项目安装到两个不同的Android设备上.其中一个有usb主机(Device A)项目,另一个有usb附件(Device B)项目.
我的问题是,我可以将usb主机项目连接到Device B.我可以看到有关设备的所有信息.但在配件项目(设备B)中我看不到有关设备A的任何事情.
manager.getAccessoryList()始终返回null.我的USB配件项目代码在这里.
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
for (UsbAccessory accessory : manager.getAccessoryList()) {
String list = " DESCRIPTION : " + accessory.getDescription() + " MODEL : " + accessory.getModel() + " MANUFACTURER : " + accessory.getManufacturer() + " SERIAL : " + accessory.getSerial();
Toast.makeText(this, list, Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud) 特此情况:我正在开发一款必须在附件模式下工作的Android平板电脑.原因是因为平板电脑无法提供足够的电力来执行与串行USB微控制器的通信并仍然为其电池充电.
为了实现成功的通信,我必须能够设置一些串行条件 Modbus/RTU
Delphi的一个很好的例子是Modlink.
一个很好的指导是UART https://github.com/ytai/ioio/wiki/UART
同时,我发现了一些有用的项目,但它们的目的是在主机模式下工作.
https://github.com/mik3y/usb-serial-for-android https://github.com/ksksue/Android-USB-Serial-Monitor-Lite
我正在寻找有关如何创建可与串行USB通信的Android应用程序的任何有价值的信息,指导和参考.
我怎样才能做到这一点?
注意:我正在使用Android Studio
.
将USB配件拔出并重新打开后,我在重新连接它时遇到问题。第一次插入附件时,我可以执行所有步骤以与设备进行实际通信
当我拔下电缆并再次插入时,我可以完成上面列出的前两个步骤。问题是UsbManager的打开附件返回空值作为ParcelFileDescriptor。是什么原因造成的?可能是某些资源仍被保留,因此Android无法授予我访问该设备的权限吗?我将在调用openAccessory之前释放I / O流并关闭ParcelFileDescriptor。还有其他措施可以正确清理附件吗?有关USB附件的官方文档页面上有一个有关终止通讯的部分,但它并不是很有帮助。
http://developer.android.com/guide/topics/connectivity/usb/accessory.html
我正在用 Java 编写一个 Android 应用程序,该应用程序使用 Android 配件 API 与 USB 配件进行通信。
在谷歌文档并没有给出实际读取和写入数据,只是如何打开附件进行通信的例子。
它还说明了两件事:
我实现了这样的阅读:
/** boiler plate from example docs: **/
fileDescriptor = usbManager.openAccessory(accessory);
if (fileDescriptor != null) {
FileDescriptor fd = fileDescriptor.getFileDescriptor();
inputStream = new FileInputStream(fd);
readBuffer = new byte[16384];
// ... some more code that is not relevant for reading data ... //
}
/** my code in separate thread: **/
int read;
while ((read = …
Run Code Online (Sandbox Code Playgroud) 我有adb无线连接工作用于在eclipse中调试应用程序,但我遇到的问题是使用USB电缆连接到附件的应用程序.
该应用程序设计为在插入附件时启动,因此我建立了我的ADB连接,然后在eclipse,代码加载等上运行调试,现在当我在应用程序中插入附件启动并运行但失去与eclipse的通信.所以我无法调试!
谁能告诉我 USB 主机和 USB 附件有什么区别?
要通过 USB 从 Android 设备发送数字数据,我应该使用什么模式?
谢谢..