4

Ich kann keine Datei aus dem Download-Ordner öffnen.FileProvider - Datei aus Download-Verzeichnis öffnen

kann ich eine Datei herunterladen und in Download-Ordner mit diesem speichern:

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); 

Danach ist meine Datei im Verzeichnis Ordner korrekt gespeichert: Android >> interne Shared Storage >> Download. *** Diesen Pfad sehe ich manuell öffnen des Geräts hd in Ubuntu. Wie das Bild den Weg zeigt. Android HD by ubuntu folder - see the path

Und ich versuche, öffnen Sie diese Datei mit diesem:

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)); 

ich meine Datei-Provider in Manifest erklären mit diesem:

<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> 

und mit diesem:

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="Download" path="Download/"/> 
</paths> 

Aber wenn ich auf den Knopf zum Herunterladen klicke, erhalte ich folgende Nachricht: "Diese Datei konnte nicht zugegriffen werden. Prüfen Sie den Standort oder das Netzwerk und versuchen Sie es erneut „

wieder aufnehmen:

1 - Die Datei heruntergeladen und im Verzeichnis Ordner gespeichert

2 - Die Absicht gestartet, aber die Datei nicht.. openned

3 - Debug-Modus mir geben diese an "neue Datei (urlString)":. "urlString =/storage/emulierten/0/Download/Name.pdf"

4 - bei „FileProvider.getUriFromFile. .. "Debug-Modus habe dies:

"uriFile = Inhalt: //com.example.android.parlamentaresapp.fileprovider/Download/name.pdf"

Danke.

+0

'Android >> Interner gemeinsamer Speicher >> Download.'. Das ist kein Dateisystempfad, den Sie in Ihrem Code verwenden könnten. Bitte geben Sie den vollständigen Pfad an. – greenapps

Antwort

6

Anruf addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) auf dem Intent, die Sie mit startActivity() und der FileProviderUri verwenden. Andernfalls hat die Aktivität keine Rechte, auf Ihre Inhalte zuzugreifen.

+0

Vielen Dank. Löste mein Problem !!! – Sarara

+0

Vielen Dank. Die fehlende Flagge war das Problem! –

+0

Danke, es funktioniert für mich, aber die empfangende App (Amaze Texteditor) zeigt 'sh: [7]: cat: /Download/error.txt: Keine solche Datei oder Verzeichnis' –

Verwandte Themen