- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用连接到我的 Android 设备的 USB 摄像头设备。所以最初我通过 UsbManager.getDeviceList()
方法获得了连接的 USB 设备的详细信息。然后我遍历每个设备并请求许可(如果尚未授予许可)。
在请求权限之前,我已经注册了一个全局BroadCastReceiver
来监听所请求权限的响应。
这是 MainActivity.java:
public class MainActivity extends AppCompatActivity {
private UsbManager usbManager_;
private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
public PendingIntent permissionIntent;
private static String TAG = "testing";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SurroundView surroundView = new SurroundView(this);
// setContentView(surroundView);
usbManager_ = (UsbManager) getSystemService(USB_SERVICE);
permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
requestUsbPermissions();
}
private final BroadcastReceiver usbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "received intent by broadcast " + 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.i(TAG, "got the permission");
}
} else {
Log.d(TAG, "permission denied for device " + device);
}
}
}
}
};
public void requestUsbPermissions(){
HashMap<String, UsbDevice> deviceList = usbManager_.getDeviceList();
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
this.registerReceiver(usbReceiver, filter);
Log.i(TAG, "registered broadcast receiver!");
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while (deviceIterator.hasNext()) {
UsbDevice device = deviceIterator.next();
Log.i(TAG,
"Camera: device Id " + device.getDeviceId() + " device mName : " + device.getDeviceName());
if (!usbManager_.hasPermission(device)) {
Log.i(TAG, "requesting permission");
usbManager_.requestPermission(device, permissionIntent);
}
}
}
}
因此,当我运行该应用程序时,它会检测到已连接的一个 USB 设备并请求该设备的权限。但要求用户输入的对话框永远不会出现。相反,当 BroadCastReceiver
接收到 Intent 时,intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)
的值将始终为 false,这意味着权限已被拒绝。谁能向我解释一下为什么对话框一开始就没有出现以及为什么权限被自动拒绝。
这是我的 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.vision_sdk_testing">
<uses-feature android:name="android.hardware.usb.host" android:required="true"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
下面是输出日志:
2020-05-01 17:56:05.282 30769-30769/com.example.vision_sdk_testing I/testing: registered broadcast receiver!
2020-05-01 17:56:05.283 30769-30769/com.example.vision_sdk_testing I/testing: Camera: device Id 1003 device mName : /dev/bus/usb/001/003
2020-05-01 17:56:05.283 30769-30769/com.example.vision_sdk_testing I/testing: requesting permission
2020-05-01 17:56:05.301 30769-30769/com.example.vision_sdk_testing I/testing: received intent by broadcast com.android.example.USB_PERMISSION
2020-05-01 17:56:05.302 30769-30769/com.example.vision_sdk_testing D/testing: permission denied for device UsbDevice[mName=/dev/bus/usb/001/003,mVendorId=1443,mProductId=38192,mClass=239,mSubclass=2,mProtocol=1,mManufacturerName=Sonix Technology Co., Ltd.,mProductName=USB 2.0 Camera,mVersion=1.00,mSerialNumberReader=android.hardware.usb.IUsbSerialReader$Stub$Proxy@d41ebfa,mConfigurations=[
UsbConfiguration[mId=1,mName=null,mAttributes=128,mMaxPower=128,mInterfaces=[
UsbInterface[mId=0,mAlternateSetting=0,mName=HD USB Camera,mClass=14,mSubclass=1,mProtocol=0,mEndpoints=[]]
UsbConfiguration[mId=3,mName=null,mAttributes=3,mMaxPower=88,mInterfaces=[]]
感谢任何帮助。谢谢!
最佳答案
对我来说,我必须在设置菜单中进入应用程序的权限,并授予我的应用程序相机权限。我猜这是因为我的 USB 设备是相机?一旦我授予此权限,该应用程序就按照文档 https://developer.android.com/guide/topics/connectivity/usb/host 中所述工作。
关于java - UsbDevice requestPermission 被拒绝,且未显示请求对话框提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61542540/
运行时权限对话框在 Android 6.0 或更高版本中显示,因此在 API 级别 23 中添加的 Activity.requestPermissions(...) 是有意义的。 但是为什么还有一个(
当我的Activity来电ActivityCompat.requestPermissions ,不出现 UI 对话框。 ActivityCompat.requestPermissions(HomeAc
问题... 我正在尝试在 Android Marshmallow 中实现运行时权限,同时保持向后兼容性。我以前已经成功完成过此操作,我不确定这次有什么不同。我已经在物理 Note 5(运行 Mallo
我发现了很多具有相同威胁的相似主题,但我仍然找不到解决我的问题的方法。我写这段代码是为了向应用程序授予写入权限,但没有显示对话框。我进入监视器没有写权限消息。 if(ContextCompat.che
由于 Android 去年添加,Android API 版本 23 及更高版本中的运行时权限问题,我有一个关于 ActivityCompat.requestPermissions(thisActivi
我的 Cordova 应用程序使用 DeviceMotionEvent.requestPermission() 函数来请求用户访问 iOS 设备方向的权限。但iOS生成的提示是: "" Would L
浏览器一直放弃请求通知权限,只是决定它是默认的。我怎样才能让它请求许可,这样我才能真正接受? 最佳答案 这个有效: Notification.requestPermission().then(func
没有调用 onRequestPermissionsResult() 的任何原因? 在 Activity A 中,我有 requestPermission(Permission A, Permissio
我有一个应用程序需要请求永久访问地理定位权限(也在后台)以收集数据。在应用程序启动时,我会像这样进行权限检查(简化) private static function check():void{
在 AndroidManifest.xml 中: 在 PreActivity.java 中 if (PermissionChecker.checkSelfPermission(preActivit
我遇到一个问题,一个函数的实现在较新的浏览器中发生了变化。我想根据实现相应地调用该函数。 Notification.requestPermission().then(function (permiss
我正在尝试请求 ACCESS_FINE_LOCATION 权限以获取用户的当前位置。 我的日志记录表明我的应用在查询 ContextCompat.checkSelfPermission() 时目前没有
调用 ActivityCompat.requestPermissions 不显示 UI 对话框。 ActivityCompat.requestPermissions(MainActivity.this
我对编程比较陌生,刚刚制作了一个相机应用程序,其预览窗口保存在表面 View 中,需要访问位置,显然还有相机。 但是,在显示一个权限的 requestPermissionRationale 并且用户同
if (ContextCompat.checkSelfPermission(RegisterActivity.this, Manifest.permission.READ_PHONE_STA
我不想让我的用户在他们真正需要应用程序之前允许通知。 因此,当用户在我的应用程序中安排本地通知时,我想请求通知权限,如果用户接受,则设置本地通知。 问题是 PushNotificationIOS.re
Notification.requestPermission() 函数已从回调更改为基于 promise 的版本。您可以在 Mozilla documentation 中看到这一点. 为当前浏览器选择
这可能是一个非常愚蠢的问题。 我有一个几年前使用 Eclipse 编写的应用程序,适用于 Android OS 8 (2.3.x)。我正在尝试将其带入现代世界(仍然使用 8 构建,但目标是 28),并
我正在尝试使用连接到我的 Android 设备的 USB 摄像头设备。所以最初我通过 UsbManager.getDeviceList() 方法获得了连接的 USB 设备的详细信息。然后我遍历每个设备
我需要在我的应用程序中访问照片和 map 。所以我在 plist 文件中添加了相应的功能。但是我需要检查请求是否被允许或拒绝。我不知道该怎么做,请建议我这个。 最佳答案 您必须明确检查不同类型的权限,
我是一名优秀的程序员,十分优秀!