Android Camera2 永久权限
Posted
技术标签:
【中文标题】Android Camera2 永久权限【英文标题】:Android Camera2 Pemanent Permission 【发布时间】:2017-02-01 18:02:24 【问题描述】:伙计们,
有没有办法为我的应用添加永久内置摄像头权限?我的应用程序需要立即运行,因为我们不希望用户记得每天早上都初始化应用程序(应该是自动的)。我在我的 androidManifest 中添加了以下内容,但似乎不起作用:
<uses-permission
android:required="true"
android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera2.full" />
<uses-feature android:name="android.hardware.camera2.autofocus" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<application
<activity
android:name="com.serenegiant.usbcameratest5.MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait"
android:launchMode="singleTask" >
<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.camera2.CameraDevice" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.camera2.CameraManager" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.camera2.CameraCharacteristics" />
</intent-filter>
<meta-data
android:name="android.hardware.camera2.CameraManager"
android:resource="@xml/device_filter" />
<meta-data
android:name="android.hardware.camera2.CameraDevice"
android:resource="@xml/device_filter" />
<meta-data
android:name="android.hardware.camera2.CameraMetadata"
android:resource="@xml/device_filter" />
</activity>
</application>
这是我尝试打开相机的代码,但程序抱怨我需要权限代码(我已将其注释掉,因为我不想要它):
private void openCamera(int width, int height)
// if (ContextCompat.checkSelfPermission(mWeakParent.clear(), Manifest.permission.CAMERA)
// != PackageManager.PERMISSION_GRANTED)
// requestCameraPermission();
// return;
//
setUpCameraOutputs(width, height);
configureTransform(width, height);
Activity activity = mWeakParent.get();
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
try
if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS))
throw new RuntimeException("Time out waiting to lock camera opening.");
manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);
catch (CameraAccessException e)
e.printStackTrace();
catch (InterruptedException e)
throw new RuntimeException("Interrupted while trying to lock camera opening.", e);
【问题讨论】:
“我们不希望用户记得每天早上都初始化应用程序”——他们只需要在您的应用程序第一次运行时授予运行时权限一次。 我明白了。也许我总是看到权限,因为每次更改代码中的某些内容时都必须重新安装应用程序。好点。 【参考方案1】:如果您不想使用运行时权限(尽管这是一种不好的做法),那么您可以在build.gradle
文件中降低您的目标 API:
android
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig
applicationId "com.xaugmentedreality.arproject"
minSdkVersion 17
targetSdkVersion 22
versionCode 1
versionName "1.0"
这会使构建工具保持最新版本,但应用程序将针对 API 版本 22 及以下版本。因此,您不需要使用运行时权限。 尽管您仍然需要在清单文件中明确声明的权限:
<uses-permission android:name="android.permission.CAMERA" />
PS:
我确实将这种方式用于我的一个应用程序,因为它进行图像处理和 以具有运行时权限的版本 > 23 为目标会导致崩溃 小米和华硕设备,最难的部分是应用程序崩溃之前 甚至像 Acra 或 Crashalytics 这样的错误报告工具也会运行。所以 这应该有效,但不是推荐的选项,只有当您的 要求就够了。
【讨论】:
camera2 是否在 SDK 22 上运行?我以为 camera2 来自 API 23 相机 2 在 API 级别 21 中添加 好吧。这是有道理的 如果对您有帮助,请将答案标记为完整! 是的...我只是要自己安装应用程序,第一次接受所有权限(无论如何我需要测试每部手机),然后将其交给客户。跨度>以上是关于Android Camera2 永久权限的主要内容,如果未能解决你的问题,请参考以下文章
支持 Android Camera Api 和 Camera2 Api 的问题
camera2(API 级别 21)是不是暴露了所有旧摄像头?