@Chesterfield25

Почему не запрашивает доступ к разрешению?

Почему не запрашивает доступ к разрешению медиа файлам? Есть пока пустое приложение с сервисом accessibility. При открытии приложения должно запрашивать доступ к разрешениям использования accessibility и медиа файлам. Первое включить получается а к медиа файлам запрос не происходит.

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {

    private static final int PERMISSION_REQUEST_CODE = 123; // Любое уникальное число

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Проверяем, есть ли у приложения необходимые разрешения
        if (checkPermissions()) {
            // Разрешения уже предоставлены, запускаем службу AppMonitorService
            startAppMonitorService();
        } else {
            // Если разрешения не предоставлены, запрашиваем их у пользователя
            requestPermissions();
        }
    }

    private boolean checkPermissions() {
        // Проверяем разрешение на использование PACKAGE_USAGE_STATS
        int usageStatsPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.PACKAGE_USAGE_STATS);

        // Проверяем разрешение на использование BIND_ACCESSIBILITY_SERVICE
        int accessibilityServicePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.BIND_ACCESSIBILITY_SERVICE);

        // Проверяем разрешение на доступ к медиафайлам
        int storagePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        // Для Android 11 и выше, используем новый способ запроса разрешения WRITE_EXTERNAL_STORAGE
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            storagePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.MANAGE_EXTERNAL_STORAGE);
        }

        return (usageStatsPermission == PackageManager.PERMISSION_GRANTED && 
                accessibilityServicePermission == PackageManager.PERMISSION_GRANTED && 
                storagePermission == PackageManager.PERMISSION_GRANTED);
    }

    private void requestPermissions() {
        // Запрашиваем разрешение на использование PACKAGE_USAGE_STATS
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.PACKAGE_USAGE_STATS}, PERMISSION_REQUEST_CODE);

        // Запрашиваем разрешение на использование BIND_ACCESSIBILITY_SERVICE
        Intent accessibilitySettingsIntent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
        startActivity(accessibilitySettingsIntent);
        
        // Для Android 11 и выше, запрашиваем разрешение MANAGE_EXTERNAL_STORAGE
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.MANAGE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
        }
    }

    private void startAppMonitorService() {
        // Запускаем службу AppMonitorService
        Intent serviceIntent = new Intent(this, AppMonitorService.class);
        ContextCompat.startForegroundService(this, serviceIntent);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQUEST_CODE) {
            // Проверяем результат запроса разрешений
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Разрешения предоставлены, запускаем службу AppMonitorService
                startAppMonitorService();
            } else {
                // Разрешения не были предоставлены, обработайте это событие соответствующим образом
                // Можете показать сообщение пользователю о необходимости разрешений или завершить приложение
            }
        }
    }
}
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
посмотрите еще раз на свой requestPermissions()
запросить, запустить активити,запросить

так не сработает . андроид три разных экрана одновременно должен открыть по вашей логике

несколько пермишинов запращиваются добавлением в массив строк, а не повторными вызовами.
переход к настройкам отдельная задача
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы