android动态权限usb,通过android.hardware.usb获得的USB权限不适用于NDK

我能够通过

Android的USB Host API获得与设备通信的权限.

private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";

protected void execute(Context ctxt) {

UsbManager manager = (UsbManager) viewer.getSystemService(Context.USB_SERVICE);

HashMap deviceList = manager.getDeviceList();

UsbDevice d = null;

for (String s : deviceList.keySet()) {

d = deviceList.get(s);

}

PendingIntent mPermissionIntent = PendingIntent.getBroadcast(ctxt, 0, new Intent(ACTION_USB_PERMISSION), 0);

IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);

viewer.registerReceiver(mUsbReceiver, filter);

manager.requestPermission(d, mPermissionIntent);

}

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) {

UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {

if(device != null){

Log.d(TAG, "Permission granted!");

}

}

else {

Log.d(TAG, "permission denied for device " + device);

}

}

}

}

};

不幸的是,这并没有赋予我的NDK代码直接与此设备通信的权限(这是libusb所需的).有没有办法在没有root的情况下将权限从Java“转移”到NDK?

附:

我最终使用UNIX套接字将原始的File Descirptor从Java转移到Android本机可执行文件(我在https://github.com/martinmarinov/rtl_tcp_andro-将GNU编辑为项目).

对于某些人来说,它会更容易,因为他们可能正在使用NDK直接连接设备(而不是第三方应用程序),因此NDK仍然可以访问它们在Java中使用的指针,而不必使用UNIX插座.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值