onRequestPermissionsResult функционируй формы, не ожидаемой, не спрашивая в диалоге

У меня есть проблема с новым способом просить разрешения в Andorid (начиная с 6.0) я пробую просить у пользователя из-за диалога позволять в приложение соглашаться на камеру через метод ActivityCompat.requestPermissions() но вместо того, чтобы отпускать диалог, введи прямо override onRequestPermissionsResult. Сначала я определяю разрешение в manifest:

<uses-permission android:name="android.permission.CAMERA" />

После, в моем main activity я определяю стоимость для callback разрешения:

 private final int REQUEST_PERMISSION_CAMERA=1;

Позже я звоню в проверку из меня onCreate() :

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        abrirCamara = (Button) findViewById(R.id.button);
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            abrirCamara.setEnabled(false);
            ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE },REQUEST_PERMISSION_CAMERA);
        }
    }

Восток - мой override onRequestPermissionsResult:

@Override
    public void onRequestPermissionsResult(
            int requestCode,
            String permissions[],
            int[] grantResults) {
        switch (requestCode) {
            case REQUEST_PERMISSION_CAMERA:
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(MainActivity.this, "Permission Granted!", Toast.LENGTH_SHORT).show();
                    abrirCamara.setEnabled(true);
                } else {
                    Toast.makeText(MainActivity.this, "Permission Denied!", Toast.LENGTH_SHORT).show();
                }
        }
    }

Результат, ожидаемый от всего этого состоит, в том, чтобы после того, как инициализирует приложение, он спросил у пользователя, хочет ли позволить доступ к камере той же самой, но в Вашем месте, вводит меня всегда как будто уже у него были необходимые разрешения, не спрашивая, а именно, не отпускает диалог, и как я подтвердил делая debug, входит в case REQUEST_PERMISSION_CAMERA: метода onRequestPermissionsResult. Я использую самую недавнюю версию SDK.

что может происходить?

1
задан 24.01.2017, 03:23
0 ответов

Он добавлял плохо разрешения в Manifest.xml, считал это таким, который я схватил:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="mi.paquete.camaraandroid">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <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>

Он не знал, что разрешения не могут идти внутри этикетки application, чтобы объявлять их правильно:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="mi.paquete.camaraandroid">
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        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>
0
ответ дан 03.12.2019, 17:32

Если ты определил разрешения, и если он вводится в метод onRequestPermissionsResult() не требуя разрешений и он не посылает сообщение, означает, что уже распределены разрешения, ты можешь проверять это в конфигурации, видь в приложения и проверь в разрешениях приложения, если он включен, он не покажет диалог.

Ты можешь дезактивировать это и инициализировать твое приложение тогда показало бы себе диалог:

introducir la descripción de la imagen aquí


Относительно разрешений, эти должны быть определенными внутри tag <manifest и снаружи <application

больше информации: https://developer.android.com/guide/topics/permissions/defining.html

1
ответ дан 03.12.2019, 17:32

Если ты находишься debugueando в виртуальном устройстве, приложение прокрути изображение в окне с привилегированным пользователем и ему предоставляются все разрешения без взаимодействия с пользователем. Если ты используешь физическое устройство, чтобы скроллировать приложение, убедись, что API target была 23 или начальником.

0
ответ дан 03.12.2019, 17:32