ファイルが存在しない場合は、特定のディレクトリにダウンロードする簡単なコードを記述します。これは、一部のデバイスで正しく動作しないではない他のいくつかの中に(私はそれはばかげているようだ知っている)私のコードです:Android:file.existsファイルをダウンロードして保存するときに常にfalseが返されるいくつかのデバイス
try {
File direct = new File(Environment.getExternalStorageDirectory().toString() + "/abredanesh/library");
boolean result = false;
if(!direct.exists())
result = direct.mkdirs();
File myfile = new File(Environment.getExternalStorageDirectory() + "/abredanesh/library","/a.pdf");
if (!myfile.getAbsoluteFile().exists()) {
DownloadManager mgr = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
Uri downloadUri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(downloadUri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI
| DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false).setTitle("ابر دانش");
request.setDescription("دانلود کتاب");
request.setDestinationInExternalPublicDir("abredanesh/library/", "a.pdf");
mgr.enqueue(request);
}
} catch (Exception e) {
Log.e("PARSE_ERROR", e.toString());
e.printStackTrace();
}
そして、これは私の許可リストである:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
<uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" />
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.ghaleh.football.permission.C2D_MESSAGE" />
<!-- permission if the application needs to keep the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
私の目標のAndroidバージョンこのコードは、アンドロイド5.1のHuaweiとアンドロイド4.4のSamsung J2でうまく動作します。 アンドロイド4.2のHTC欲望では、beacausemyfile.getAbsoluteFile()。exists()がfalseを返すたびにファイルをダウンロードします。 (myfile.exists()とmyfile.canread()のどちらか)。 はアンドロイド6とNexus 5のでは、フォルダを作成し、それをダウンロードするためのアクセス許可エラーを示しています。
サムスンとHTCの両方に外部メモリがあり、HuaweiとNexusは外部メモリを持っていません。このコードはサムスンの内部メモリにフォルダとファイルを作成し、HTCで外部ファイルを使用します!
私のコードで何が問題になっていますか?他の権限が必要ですか?なぜこれらのデバイスのどれも次のようには動作しません!私は多くのページとfile.existに関する質問を見ましたが、答えのどれも私のすべてのデバイスで動作しません。
============================================== ========
編集:@draksia私は、ファイルを開こうとしたお勧めのよう
。私は、ファイル開くには、このコードを使用します「この文書を開くことができない」
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(myfile), "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent = Intent.createChooser(target, "Open File");
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
// Instruct the user to install a PDF reader here, or something
}
サムスンとHuaseiがファイルを開きますが、HTCは、このエラーが発生しますが(私はHTCのPDFを開くためのいくつかのアプリを持っています)
ファイルが存在するかどうかを確認するのではなく、ファイルを開くとエラーが表示されますか? – draksia
'Android 6のNexus 5では、フォルダを作成してダウンロードする際に権限エラーが表示されます。Android 6では権限システムが変更されています。 –
@BobMaloogaターゲットバージョンは23です。Android 6の権限システムはターゲットバージョンに関連していますか? – Taher