こんにちは、Android Nougatでダウンロードしたapkを開くのが大変です。私はファイルプロバイダが私がちょうど正しいパスを入力する方法を把握できないことによって使用される必要があることを知っています。アプリがクラッシュするか、ファイルが見つかりません。それは常に/storage/emulated/0/Android/data/cf.vojtechh.apkmirror/Downloadsを開きます - もちろんどちらが存在しません。私は内部ストレージAndroid Nougatでダウンロードしたファイルをファイルプロバイダで開きます。
任意のアイデア(Environment.getExternalStorageDirectory()。ある、getPath()+ "/" + Environment.DIRECTORY_DOWNLOADS + "/" + fileNameにのようなもの)でのダウンロードディレクトリをアクセスもするアプリが必要?私はこれをインターネット上で1時間以上探していましたが、私はそれを見つけることができませんでした(私は怒っていましたので、私はそこでクラッシュして無視したいと思っていました)
MainActivity.java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
File apkfile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName);
Uri apkUri = FileProvider.getUriForFile(MainActivity.this, "cf.vojtechh.apkmirror.provider", apkfile);
String s = apkUri.toString();
Log.d("HERE!!",s);
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(apkUri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
} else {
File apkfile = new File(Environment.getExternalStorageDirectory().getPath() + "/" + Environment.DIRECTORY_DOWNLOADS + "/" + fileName);
Uri apkUri = Uri.fromFile(apkfile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="Download" path="Download/"/>
</paths>
AndroidManifest.xmlを
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="cf.vojtechh.apkmirror.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>