2016-04-12 12 views
-1

私のアンドロイドアプリで。誰かがファイルをダウンロードしようとすると、ストレージのアクセス許可を求める必要があります。許可されている場合、ファイルのダウンロードが開始されます。 次回は許可が既に与えられている場合は、新しいダウンロードを開始してください。ファイルをダウンロードし、アンドロイドでstorgeの許可を求める

ユーザーが許可アプリのクラッシュを拒否した場合: は、ここでは、このコードで

 public void downloadFile(String url) { 
      Uri source = Uri.parse(url); 

      // Make a new request pointing to the download url 
      DownloadManager.Request request = new DownloadManager.Request(source); 
       request.allowScanningByMediaScanner(); 
       request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 

      String fileExtension = MimeTypeMap.getFileExtensionFromUrl(url); 
      String fileName = URLUtil.guessFileName(url, null, fileExtension); 

      // save the file in the "Downloads" folder of SDCARD 
      request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); 
      // get download service and enqueue file 
      DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
      manager.enqueue(request); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      if (url.contains("?dl=1")) { 
       if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
         == PackageManager.PERMISSION_GRANTED) { 
        downloadFile(url); 
       } else { 
        ActivityCompat.requestPermissions(MainActivity.this, 
          new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
          REQUEST_WRITE_EXTERNAL_STORAGE); 

       } 
       return true; 

      } 

問題がある...私のコードの一部です。

ユーザーが最初のアクセス許可を許可すると、ダウンロードはすぐに開始されません。ユーザーはダウンロードリンクを再度クリックする必要があります。

+2

**完璧ではありません**答えられる質問はありません。 logcatと一緒にエラー/非必要な動作を記述します。 –

+0

こんにちは、私は質問を更新しました。ありがとう。 – baalal

+0

アクセス許可を確認する:developer.android.com/training/permissions/requesting.html –

答えて

0

あなたはコールバック関数ActivityCompat.OnRequestPermissionsResultCallbackを実装する必要があります。

public class MainActivity extends AppCompatActivity 
     implements ActivityCompat.OnRequestPermissionsResultCallback 

第2のステップは上書きすることです:

だから、最初のステップは、MainActivityは一例であり、このような何かにあなたのクラスの署名を変更するが、あなたが許可した結果を必要とする活動を延長するように注意してくださいすることです次の関数:

public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      int[] grantResults) { 

    if(requestCode == REQUEST_WRITE_EXTERNAL_STORAGE) 
    { 
     if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      //Do something if the permission is granted 
     } 
     else 
     { 
      //Do something if the permission denied 
     } 
    } 
} 
+0

許可を求めるためにこれを確認してください。http://developer.android.com/training/permissions/requesting.html –

+0

@RameshKumarどうすれば確認できますか? – Pooya

+0

申し訳ありませんがあなたの答えにコメントしました、実際には質問にコメントしていました.. –

0

shouldOverrideUrlLoadingメソッドは常にtrueを返します。それが望ましい行動ですか?

は、以下のように許可要求応答コードを追加してください:

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], 
              int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_WRITE_EXTERNAL_STORAGE: { 
      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // do your work 
      } else { 
       // permission denied 
      } 
      return; 
     } 
    } 
} 

出典:http://developer.android.com/training/permissions/requesting.html#perm-request

関連する問題