-1

自分では解決できないような問題に遭遇しました。

このアプリケーションの重要な要素は、URL からファイルをダウンロードして保存することです。AsyncTask

このファイルは最終的に保存されます

Environment.getExternalStorageDirectory().toString() + "/" + fileName + ".xls")

次に、ファイルが作成されます。

File file = new File(Environment.getExternalStorageDirectory().toString() + "/" + fileName + ".xls");

そしてストリームが作られる

InputStream is = new FileInputStream(file);

その時点でFileNotFoundException ENOENT : no such file or directory が発生します。

AndroidManifest.xml ファイルに適切な権限が設定されています

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Environment.getExternalStorageState() は「マウントされた」値を返します。

また、ファイルをダウンロードする前に、アプリで適切な資格情報を使用してログインする必要があるため、インターネット接続が確立されていることを確認できます。

API 16、Android 4.1 (Jelly Bean) 向けにこのアプリを作成しています。どんな助けでも大歓迎です!

編集: Samsung SM-G800G (Android 5.1.1、API 22) でこれを機能させることができました。しかし、アプリケーションは私の Nexus One (Android 6.0、API 23) や SAMSUNG SM-G900F (Android 6.0.1、API 23) では動作しません。

したがって、Android のバージョンがダウンロードに与える影響については、間違いなく何かが起こっているので、現在調査中です。

4

2 に答える 2

2

皆さんの貢献に感謝します。この問題は私が思っていたよりも別の場所にあり、簡単にググることができました。

MetaSnarf によるこの投稿に感謝します

問題は、Android 6.0 以降 (API 23 以降) がアクセス許可を処理する方法にあります。

AndroidManifest.xmlファイル<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />を配置するだけでは、アプリケーションがアクセス許可を取得するのに十分ではありません。コードに次のブロックを追加して修正しました。

if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            }
            else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }
        }
于 2016-10-15T15:30:39.860 に答える
1

置き換えてみてください:

`Environment.getExternalStorageDirectory().toString()`

`Environment.getExternalStorageDirectory().getAbsolutePath()`
于 2016-10-15T13:16:15.280 に答える