url
からダウンロードビデオ用のThinDownloadManager
ライブラリを使用しています。動画を非公開にする必要があるので、私はinternal storage
を使ってビデオをダウンロードしてプライベートにすることをお勧めします。上で使用されたライブラリでは、私たちが提供する2つのもの、最初はURLであり、2番目はビデオファイルを保存するパスです。内部パスを与えると例外が発生し、video onDownloadFailedメソッドが呼び出されます。ava.io.IOException:オープンに失敗しました:EACCES(許可が拒否されました)
以下は、私が外部ストレージのパスが正常に動作して提供すると以下の私のlogcatエラー
java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:946)
at com.thin.downloadmanager.DownloadDispatcher.transferData(DownloadDispatcher.java:213)
at com.thin.downloadmanager.DownloadDispatcher.executeDownload(DownloadDispatcher.java:142)
at com.thin.downloadmanager.DownloadDispatcher.run(DownloadDispatcher.java:81)
0Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at java.io.File.createNewFile(File.java:939)
である私のコード
public void startVideoDownloading() {
//Show downloading in notification bar
final NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle("Video downloading")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_notification);
ThinDownloadManager downloadManager = new ThinDownloadManager();
Uri downloadUri = Uri.parse(videoId);
File fileDir = createDirectory();
Uri destinationUri = Uri.parse(fileDir + uniqueId);
DownloadRequest downloadRequest = new DownloadRequest(downloadUri)
.setDestinationURI(destinationUri).setPriority(DownloadRequest.Priority.HIGH)
.setDownloadListener(new DownloadStatusListener() {
@Override
public void onDownloadComplete(int id) {
Toast.makeText(Player.this, "Download Completed", Toast.LENGTH_SHORT).show();
mBuilder.setContentText(" Video download completed")
.setProgress(0, 0, false);
mNotifyManager.notify(id, mBuilder.build());
}
@Override
public void onDownloadFailed(int id, int errorCode, String errorMessage) {
Toast.makeText(Player.this, "Download Failed", Toast.LENGTH_SHORT).show();
mBuilder.setContentTitle("Failed");
mBuilder.setContentText("Downloading failed")
.setProgress(0, 0, false);
mNotifyManager.notify(id, mBuilder.build());
}
@Override
public void onProgress(int id, long totalBytes, long downloadedBytes, int progress) {
donutProgress.setProgress(progress);
mBuilder.setProgress(100, progress, false);
mNotifyManager.notify(id, mBuilder.build());
}
});
downloadManager.add(downloadRequest);
}
public File createDirectory() {
File folder = new File(Environment.getDataDirectory() + "/+" + "downloadVideo/");
if (!folder.exists()) {
folder.mkdir();
Log.d("TAG","Directory created");
}else {
Log.d("TAG","Directory exists");
}
return folder;
}
です。どうすればこの問題を解決できますか?あなたが最も可能性が高い(ここで説明するよう:https://developer.android.com/training/basics/data-storage/files.html)マニフェストに次の行を追加する必要が
あなたはmenifest –
@Jinalでの書き込み内部ストレージのための権限を追加する必要があり、私はuが私の許可のようなタイプを提供することができ、書き込み内部storage.Ifの必要性のための権限を追加する必要がないと思います? –