1

Meine App lädt eine Datei aus dem Internet herunter und speichert sie im Ordner "Downloads" sowie eine Benachrichtigung, dass die Datei heruntergeladen wurde. Wenn ich auf die Benachrichtigung klicke, habe ich chooserIntent erstellt, um eine App zum Öffnen der Datei auszuwählen. Jede App, die ich auswähle, öffnet die Datei jedoch nicht mit der Fehlermeldung: "Datei kann nicht geöffnet werden", aber wenn ich zu einem Dateimanager gehe, wird die Datei problemlos geöffnet. Ich denke, es ist etwas mit Berechtigungen verbunden? BTW, ist Uri wie dieser (Android 7.1) erhalten:Android: Heruntergeladene Datei kann nicht aus der Benachrichtigung geöffnet werden. Fehler: "Datei kann nicht geöffnet werden"

Uri fileUri = FileProvider.getUriForFile(getActivityContext(), getAppContext().getPackageName() + ".provider", file); 

hier für die Benachrichtigung ist mein Code:

private Notification downloadCompleteNotification(String title, String message, Uri uri) { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.setDataAndType(uri, "*/*"); 
    Intent chooser = Intent.createChooser(intent, getResources().getString(R.string.open_file_with)); 
    NotificationCompat.Builder builder = initBasicBuilder(title, message, intent); 
    builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_u)); 
    builder.setOngoing(false); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, chooser, 0); 
    builder.setContentIntent(pendingIntent); 
    return builder.build(); 
} 

private NotificationCompat.Builder initBasicBuilder(String title, String text, Intent intent) { 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
    builder.setSmallIcon(R.drawable.u) 
      .setContentTitle(title) 
      .setContentText(text); 
    if (intent != null) { 
     TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this); 
     taskStackBuilder.addNextIntentWithParentStack(intent); 
    } 
    return builder; 
} 
+0

Ihre Android-Version? –

+0

Wie gesagt: Android 7.1. – Sermilion

+0

Oh ich verpasste es .. Haben Sie READ_EXTERNAL_STORAGE Runtime-Erlaubnis gegeben? –

Antwort

0

diesen Code in Ihrer onCreate Methode Aktivität Setzen.

public static boolean hasPermissions(Context context, String... permissions) { 
     if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
      for (String permission : permissions) { 
       if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
0

Wenn Sie API level 23 oder höher verwenden: Sie können durch Kommata

int PERMISSION_ALL = 1; 
     String[] PERMISSIONS = {android.Manifest.permission.READ_EXTERNAL_STORAGE}; 

     if(!hasPermissions(this, PERMISSIONS)){ 
      ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL); 
     } 

Und fügen Sie diese Funktion getrennt mehrere Erlaubnis hier hinzufügen. Sie müssen Run Time Erlaubnis geben. Sowie in der Manifestdatei.

private static final int REQUEST_EXTERNAL_STORAGE = 1; 
private static String[] PERMISSIONS_STORAGE = { 
    Manifest.permission.READ_EXTERNAL_STORAGE, 
    Manifest.permission.WRITE_EXTERNAL_STORAGE 
}; 


private boolean checkPermissions() { 
     int result; 
     List<String> listPermissionsNeeded = new ArrayList<>(); 
     for (String p : PERMISSIONS_STORAGE) { 
      result = ContextCompat.checkSelfPermission(mContext, p); 
      if (result != PackageManager.PERMISSION_GRANTED) { 
       listPermissionsNeeded.add(p); 
      } 
     } 
     if (!listPermissionsNeeded.isEmpty()) { 
      ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_EXTERNAL_STORAGE); 
      return false; 
     } 
     return true; 
    } 

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     switch (requestCode) { 
      case REQUEST_EXTERNAL_STORAGE: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // Permission granted. 
       } else { 
        //code for deny 
       } 
       break; 
     } 
    } 
+0

Ich habe versucht, Leseberechtigungen anzufordern, aber es scheint, dass die App diese Berechtigungen hat. Ich habe das Debugging überprüft. Lassen Sie uns noch einmal klarstellen, dass die externe Anwendung die heruntergeladene Datei nicht öffnen kann, wenn sie von der Benachrichtigung über meine App aus gefragt wird, sondern sie tatsächlich vom Dateimanager aus öffnen kann. – Sermilion

Verwandte Themen