Почему не запрашивает доступ к разрешению медиа файлам? Есть пока пустое приложение с сервисом 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 {
// Разрешения не были предоставлены, обработайте это событие соответствующим образом
// Можете показать сообщение пользователю о необходимости разрешений или завершить приложение
}
}
}
}