Эй, я разрабатываю приложение в студии Android. В котором требуется разрешение камеры. Я включил <uses-permission android:name="android.permission.CAMERA" />
в файл AndroidManifest.xml. Он работает правильно во всех версиях Android, кроме Marshmallow. Как получить разрешение камеры по умолчанию? Если не возможно, как я могу попросить его у пользователя?
Как получить разрешение для камеры в android. (В частности, Marshmallow)
Ответ 1
Сначала проверьте, предоставил ли пользователь разрешение:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED)
Затем вы можете использовать это для запроса пользователю:
ActivityCompat.requestPermissions(activity, new String[] {Manifest.permission.CAMERA}, requestCode);
И в Marshmallow он появится в диалоговом окне
Ответ 2
Вы можете попробовать следующий код для запроса разрешения камеры в зефире. Сначала проверьте, дает ли пользователь разрешение. Если пользователь не предоставил разрешение, запросите разрешение камеры:
private static final int MY_CAMERA_REQUEST_CODE = 100;
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_REQUEST_CODE);
}
После запроса разрешения появится диалоговое окно с запросом разрешения, содержащего опции allow
и deny
. После нажатия на действие мы можем получить результат запроса следующим способом:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
Ответ 3
RxPermission - лучшая библиотека, которая сделала строку кода 1.
Для разрешения камеры это обходное решение.
1) Сначала добавьте это разрешение в свой manifest.xml
. manifest.xml
.
<uses-permission android:name="android.permission.CAMERA" />
2) Затем спросите разрешение времени выполнения.
new RxPermissions(this)
.request(Manifest.permission.CAMERA) // ask single or multiple permission once
.subscribe(granted -> {
if (granted) {
// All requested permissions are granted
} else {
// At least one permission is denied
}
});
добавьте эту библиотеку в свой build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}
Разве это не так просто?
Ответ 4
check using this
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED)
и
Ответ 5
Это работает для меня, источник здесь
int MY_PERMISSIONS_REQUEST_CAMERA=0;
// Here, this is the current activity
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
{
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA))
{
}
else
{
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA );
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}