Есть простое приложение которое должно скачать файл на часы при нажатие на кнопку.
Первая проблема в том что оно его через раз скачивает!
Даже если оно его скачало и я пытаюсь его открыть
у меня выскакивает окно настроек для того что бы я мог дать разрешения
но когда я нажимаю на кнопку
settings
у меня приложение возвращается к первоначальному окну.
Вот код приложения
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();
}
}
}
Если я тестирую данный код на эмуляторе телефона а не на часах то данные настройки открываются и все работает.