2015-11-13 5 views
0

После трех дней поиска я понял, что андроид 6 или изменить разрешения. Но я не могу попросить oermisiunea сохранить файл. Я, наверное, примеры, но это не так, я сделал что-то не так. Пожалуйста, помогите.Android Marshmallow requestPermissions WRITE_EXTERNAL_STORAGE

String url = "http://grupovrt.ddns.net:81/v4.2.apk"; 
     DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 
     request.setDescription("Virtual Romania Tv UPDATE"); 
     request.setTitle("UPDATE Virtual Romania Tv"); 
// in order for this if to run, you must use the android 3.2 to compile your app 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
      request.allowScanningByMediaScanner(); 
      request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 

     } 
     if (!checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, 
       R.string.title_activity_categori)) 
     { 
      Toast.makeText(getBaseContext(), "Not allowed to save files", Toast.LENGTH_SHORT).show(); 
     } else { 

      // try to save the file 

      request.setDestinationInExternalPublicDir("/update", "v4.2.apk"); 

     } 


// get download service and enqueue file 
     DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
     manager.enqueue(request); 

Ошибка: Ошибка: (108, 49) Ошибка: не удается найти SYMBOL переменную WRITE_EXTERNAL_STORAGE

Edit.

Я искал, если дано разрешение на запись. , но я не знаю, как спросить разрешения, если это не так. Пожалуйста, помогите мне, я попробовал все, что нашел на google, но не смог. Я новичок.

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      == PackageManager.PERMISSION_GRANTED) { 

      Toast.makeText(getBaseContext(), "Descarc noi actualizari!", Toast.LENGTH_SHORT).show(); 



      String url = "http://grupovrt.ddns.net:81/v4.2.apk"; 
      DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 
      request.setDescription("Virtual Romania Tv UPDATE"); 
      request.setTitle("UPDATE Virtual Romania Tv"); 

      // in order for this if to run, you must use the android 3.2 to compile your app 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {request.allowScanningByMediaScanner(); 
      request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
       // get download service and enqueue file 
       DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
       manager.enqueue(request); 


       Toast.makeText(getBaseContext(), "Descarc noi actualizari!", Toast.LENGTH_SHORT).show(); 

      } 


      request.setDestinationInExternalPublicDir("/update", "v4.2.apk"); 
     }else { 
      Toast.makeText(getBaseContext(), "Nu ai permisiunea sa descarci!", Toast.LENGTH_SHORT).show(); 

     } 

ответ

1

Это работает для меня:

int permissionCheck = ContextCompat.checkSelfPermission(context, android.Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(context, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
      Toast.makeText(context, "Trebuie sa oferi acces la spatiul de stocare!", Toast.LENGTH_SHORT).show(); 
      ActivityCompat.requestPermissions(context, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 110); 
      ActivityCompat.requestPermissions(context, new String[]{android.Manifest.permission.RECORD_AUDIO}, 110); 
     } else { 
      Toast.makeText(context, "Descarc noi actualizari!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
0

Чтобы упростить код, который я рекомендую использовать следующий код:

  1. Создать OnPermissionRequested интерфейс:

    public interface OnPermissionRequested { 
        void onGranted(); 
    } 
    
  2. В действиях/fragme nts добавить следующие методы для проверки разрешения. Вы также можете создать основную деятельность и фрагмент и расширить, чтобы избежать повторяющегося кода:

    OnPermissionRequested mPermissionRequest; 
    
    protected void requestPermission(String permission, OnPermissionRequested listener) { 
    
        mPermissionRequest = listener; 
    
        // Here, thisActivity is the current activity 
        if (ContextCompat.checkSelfPermission(this, permission) 
          != PackageManager.PERMISSION_GRANTED) { 
         if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { 
          Toast.makeText(this, "Permission denied, try again later please.", Toast.LENGTH_SHORT).show(); 
         } else { 
          // request the permission. 
          ActivityCompat.requestPermissions(this, 
            new String[]{permission}, 2456); 
         } 
        } else { 
         mPermissionRequest.onGranted(); 
        } 
    } 
    
    @Override 
    public void onRequestPermissionsResult(int requestCode, 
                String permissions[], int[] grantResults) { 
        if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         if (mPermissionRequest != null) 
          mPermissionRequest.onGranted(); 
        } 
    } 
    
  3. вызова метода requestPermission, где вам необходимо проверить разрешение и установить второй аргумент с действием вы хотите делать, если разрешение выдается ,

    requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, 
        new OnPermissionRequested() { 
         @Override 
         public void onGranted() { 
          // what you want to do 
          createPdf(); 
         } 
        }); 
    

Я надеюсь, что вы найдете ее полезной. Удачи

Смежные вопросы