.apkファイルをダウンロードしてインストールします。私がFileProviderを使用していないときは、すべてうまくいっていますが、FileProviderを使用してファイルからuriを作成すると、IllegalArgumentExceptionが発生します。ファイルURIではありません:content://pl.rasztabiga.klasa1a.provider/external_storage_root/klasa1a。 APK on lineAndroid:ファイルではありませんURI:.apkファイルをダウンロード中
final long downloadId = manager.enqueue(request);
私はstackoverflowからすべてを試しましたが、何も助けてくれませんでした。ここに私のコードは次のとおりです。
File file = new File(Environment.getExternalStorageDirectory(), "klasa1a.apk");
final Uri uri = FileProvider.getUriForFile(MainActivity.this, getApplicationContext().getPackageName() + ".provider", file);
//Delete update file if exists
//File file = new File(destination);
if (file.exists())
file.delete();
//get url of app on server
String url = "http://rasztabiga.ct8.pl/klasa1a.apk";
//set downloadmanager
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setDescription("Downloading new version");
request.setTitle(MainActivity.this.getString(R.string.app_name));
//set destination
request.setDestinationUri(uri);
// get download service and enqueue file
final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
final long downloadId = manager.enqueue(request);
//set BroadcastReceiver to install app when .apk is downloaded
BroadcastReceiver onComplete = new BroadcastReceiver() {
public void onReceive(Context ctxt, Intent intent) {
Intent install = new Intent(Intent.ACTION_VIEW);
install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
install.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
install.setDataAndType(uri,
manager.getMimeTypeForDownloadedFile(downloadId));
startActivity(install);
unregisterReceiver(this);
finish();
}
};
//register receiver for when .apk download is compete
registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
残念ながら、これは7.1では機能しません。それは同じものを投げます:ファイルではありません。URI:content://pl.rasztabiga.klasa1a.provider/external_storage_root/klasa1a.apk –
@BartłomiejRasztabiga:7.1.1を実行しているNexus 9で動作しています。どのデバイスをテストしていますか? – CommonsWare
Xiaomi Redmi Note 3 Pro、Android 7.1.1 –