ThinDownloadManager
からビデオをダウンロードするためにライブラリを使用していますurl
。動画を非公開にする必要があるので、internal storage
ダウンロードした動画を保存して非公開にするのに使用したいと思います。上記の使用されたライブラリでは、私たちが提供する 2 つのものがあります。1 つ目は URL で、2 つ目はビデオ ファイルを保存するパスです。内部パスを指定すると、例外が発生し、ビデオの onDownloadFailed メソッドが呼び出されます。
以下は私のコードです
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;
}
以下は私の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)
外部ストレージパスを提供すると、正常に機能します。この問題を解決するにはどうすればよいですか?