@Chesterfield25

Почему не дает возможность выбрать настройки?

Есть простое приложение которое должно скачать файл на часы при нажатие на кнопку.
Первая проблема в том что оно его через раз скачивает!
63aa1b9fd7741373847863.png
Даже если оно его скачало и я пытаюсь его открыть
63aa1c2a764b8987277755.png
у меня выскакивает окно настроек для того что бы я мог дать разрешения
63aa1c3e91e02294289946.png
но когда я нажимаю на кнопку settings у меня приложение возвращается к первоначальному окну.
63aa1c88035b1470893029.png

Вот код приложения

public class MainActivity extends Activity {

    private Button download;
    private ActivityMainBinding binding;
    private static final String URL = "https://xmonitoring.ru/load/auto_load.php";
    private static final String FILE_NAME = "wearOs.apk";
    private static final int DOWNLOAD_FILE = 100;
    private static final int INSTALL_APK = 200;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);

        binding.download.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){
                    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
                        downloadApk(URL, FILE_NAME);
                    } else {
                        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, DOWNLOAD_FILE);
                    }
                } else {
                    downloadApk(URL, FILE_NAME);
                }
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == DOWNLOAD_FILE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                binding.download.performClick();
            }
        }
    }

    private void downloadApk(String url, String file) {
        String fileName = URLUtil.guessFileName(file, null, "application/vnd.android.package-archive");
        String folder = Environment.getExternalStorageDirectory() + "/Download/";
        File newFile = new File(folder, fileName);
        try {
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
            request.allowScanningByMediaScanner();
            request.setDescription(fileName)
                    .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI)
                    .setDestinationUri(Uri.fromFile(newFile))
                    .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                    .setVisibleInDownloadsUi(true)
                    .setTitle(file);
            DownloadManager manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            assert manager != null;
            long downloadID = manager.enqueue(request);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Если я тестирую данный код на эмуляторе телефона а не на часах то данные настройки открываются и все работает.
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sapeg
Возможно разрешение нужно прописать в манифесте. Но это не точно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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