Приложение зависло на заставке только в Android 13

Мое приложение застряло на экране spalsh в Android 13 без каких-либо сбоев и даже не запрашивая разрешения в более ранних версиях Android, оно работает абсолютно идеально.

      public class SplashScreen extends AppCompatActivity {

String[] permissionsList;

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

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        permissionsList = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.POST_NOTIFICATIONS};
    } else {
        permissionsList = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE};
    }

    ((RubberLoaderView) findViewById(R.id.loader1)).startLoading();
    if (Utils.hasPermissions(this, permissionsList)) {
        ActivityCompat.requestPermissions(this, Utils.permissions, Utils.perRequest);
    } else {
        gotoNext();
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == Utils.perRequest) {
        if (Utils.hasPermissions(this, permissionsList)) {
            ActivityCompat.requestPermissions(this, Utils.permissions, Utils.perRequest);
        } else {
            gotoNext();
        }
    }
}

void gotoNext() {
    new Handler().postDelayed(() -> {
        startActivity(new Intent(SplashScreen.this, Home.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
        finish();
    }, 600);
}

Это мой код, я не могу понять проблему

1 ответ

Поскольку, понимая часть вашего кода, вы переходите к следующему экрану, если пользователь разрешил определенные разрешения во время выполнения. Проблема в том, что в последних версиях Android есть некоторые изменения разрешений, которые ваш код не соблюдает.

Во-первых, разрешение WRITE_EXTERNEL_STORAGE устарело после уровня API 28. Поэтому, если вы запросите это разрешение, оно всегда будет возвращаться.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />

Во-вторых, READ_EXTERNAL_STORAGE устарел после уровня API 32 . Он вернетсяdeniedесли вы используете его в Android 13

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

В качестве альтернативы, если вы хотите получить доступ к фотографиям и видео других приложений в Android 13, вы можете запросить следующие разрешения.

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

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

Другие вопросы по тегам