다운로드 폴더에서 파일을 열 수 없습니다.FileProvider - 다운로드 디렉토리에서 파일 열기
나는 파일을 다운로드 및이와 다운로드 폴더에 저장할 수 있습니다 :이 후
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setDescription(descricao);
request.setTitle(titulo);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, nome);
enq = downloadManager.enqueue(request);
, 내 파일 디렉토리 폴더에 저장 올바른 : 안드로이드 >> 내부 공유 스토리지 >> 다운로드합니다. ***이 경로는 우분투에서 수동으로 장치의 hd를 여는 것을 볼 수 있습니다. 이미지에 경로가 표시됩니다. Android HD by ubuntu folder - see the path
그리고 나는이이 파일을 열어보십시오
downloadManager = (DownloadManager)getContext().getSystemService(DOWNLOAD_SERVICE);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(enq);
Cursor c = downloadManager.query(query);
if(c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
if(DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
if (uriString.substring(0, 7).matches("file://")) {
uriString = uriString.substring(7);
}
File file = new File(uriString);
Uri uriFile = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".fileprovider", file);
String mimetype = "application/pdf";
Intent myIntent = new Intent(Intent.ACTION_VIEW);
myIntent.setDataAndType(uriFile, mimetype);
Intent intentChooser = Intent.createChooser(myIntent, "Choose Pdf Application");
startActivity(intentChooser);
}
}
}
}
};
getContext().registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
나는이 함께 매니페스트에 내 파일 제공자를 선언을 :
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
이와 :
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="Download" path="Download/"/>
</paths>
그러나 다운로드 버튼을 클릭하면 다음 메시지가 나타납니다. "이 파일 접근 할 수 없다. 위치 또는 네트워크를 확인하고 다시 시도하십시오 "
다시 시작 :
- 1의 파일을 다운로드하고 저장 한 디렉토리 폴더에
2
입니다 - 의도가 시작되지만 파일이 없습니다.. openned3 - 디버그 모드가 "새로운 파일 (URLString는)"날이 제공 :. - FileProvider.getUriFromFile "에서
4"URLString는 =/저장// 0/다운로드/name.pdf을 에뮬레이트 ". .. "디버그 모드는 다음과 같습니다.
"uriFile = 내용 : //com.example.android.parlamentaresapp.fileprovider/Download/name.pdf"
감사합니다.
'Android >> Internal Shared Storage >> Download.'. 이는 코드에서 사용할 수있는 파일 시스템 경로가 아닙니다. 실제 전체 경로를 입력하십시오. – greenapps