0

Ich bin nicht in der Lage zu erlauben, die App in externen Speicher schreiben, wenn andere Hintergrund-App wie Dämmerung (Dims Bildschirm) im Hintergrund ausgeführt wird. In diesem Fall kann ich es nur leugnen und es wird Screen Overlay erkannt. Aber kann nicht zulassen.Ich kann nicht auf externe Schreibzugriffsberechtigungen in Android zulassen

Mein Code:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { 

     boolean hasPermission = (ContextCompat.checkSelfPermission(Timetable.this, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); 
     if (!hasPermission) { 
      ActivityCompat.requestPermissions(Timetable.this, 
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
        1); 
     } 
    } 

Aufhebungscode:

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) 
    { 
     case 1: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
      { 
       //Intent i=new Intent(this,Timetable.class); 
       //startActivity(i); 
       //reload my activity with permission granted or use the features what required the permission 
      } else 
      { 
       Toast.makeText(Timetable.this, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

} 

ich es will laufen, auch wenn einige Hintergrund-Anwendungen wie Dämmerung laufen.

+0

Können Sie Screenshots/logcat hinzufügen? –

Antwort

1

Das Herunterladen einer bestimmten Datei mit dem integrierten Download-Manager von Android bietet Integrität und einen benutzerfreundlicheren Ansatz. Außerdem sollte die requestPermission-Methode aufgerufen werden, bevor die Geräte mit Marshmallow und höher unterstützt werden.

Und über die Schaltfläche "Zulassen" funktioniert dieses Problem nicht, weil Apps oder Aktivitäten das Bildschirm-Overlay erfassen. Wie zum Beispiel Facebook Messenger oder andere Apps zur Bildschirmdimmung. Um es daher robust zu machen, müssen Sie die Erlaubnis jedes Mal überprüfen, wenn Sie etwas herunterladen.

public void downloadFile(String uRl) { 
    File direct = new File(Environment.getExternalStorageDirectory() 
      + "/" + "MyFolder"); 

    if (!direct.exists()) { 
     direct.mkdirs(); 
    } 

    DownloadManager mgr = (DownloadManager) getSystemService(this.DOWNLOAD_SERVICE); 

    Uri downloadUri = Uri.parse(uRl); 
    DownloadManager.Request request = new DownloadManager.Request(downloadUri); 

    request.setAllowedNetworkTypes(
      DownloadManager.Request.NETWORK_WIFI 
        | DownloadManager.Request.NETWORK_MOBILE) 
      .setAllowedOverRoaming(false) 
      .setTitle("AppNameAsTitle") 
      .setDescription("Downloaded using My app") 
      .setDestinationInExternalPublicDir("/MyFolder", "filename.jpg") 
      .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
    mgr.enqueue(request); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     downloadFile(url); 

    } else { 
     Toast.makeText(this, "Permission not granted", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

Vielen Dank SanVed für die Hilfe! Hoffe, Android wird das Bildschirm-Overlay bald reparieren. Download Manager Teil ist das Beste! – johndoe122

Verwandte Themen