0

Android 6.0 애플리케이션에서 pdf 파일이나 이미지를 가져 오려면 내 인 텐트 필터에서 스토리지에 액세스해야합니다.안드로이드 6.0 런타임 권한 + 인 텐트 필터

[IntentFilter(new[] { Intent.ActionOpenDocument, Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, DataMimeType = "application/pdf")] 
[IntentFilter(new[] { Intent.ActionOpenDocument, Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, DataMimeType = "image/jpeg")] 
[IntentFilter(new[] { Intent.ActionOpenDocument, Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, DataMimeType = "image/png")] 

그러나 사용자에게 앱 저장 권한이 필요합니다.

질문은 그와 같은 경우에 적절한 POC가 있으며, 의도를 차단하고 경보를 표시하고 그 후에 권한 부여/취소에서 내 의도를 근거로 마무리해야합니까?

현재 내가 허용 할 수없는 일부 토스트 만 표시 할 수 있다고 가정하고 사용자가 앱에 들어가서 수동으로 일부 맞춤 앱 설정 등에서 권한을 사용하도록 요청합니다. 이 둘을 읽고 쓸 수있는 권한을 부여하기 때문에

+0

친절하게 당신이 필요로하는 것에 적합합니까 ?? 조금 혼란 스러웠다. –

답변

0
private static final int REQUEST_RUNTIME_PERMISSION = 1; 

    void checkPremission() { 
      //Desired permission you want 
      final String permission = Manifest.permission.CAMERA; 
       // if in fragment use getActivity() 

      if (ContextCompat.checkSelfPermission(ActivityName.this, permission) 
        != PackageManager.PERMISSION_GRANTED) { 
       if (ActivityCompat.shouldShowRequestPermissionRationale(ActivityName.this, permission)) { 

       } else { 
        ActivityCompat.requestPermissions(ActivityName.this, new String[]{permission}, REQUEST_CAMERA_PERMISSION); 
       } 
      } else { 
       // you have permission go ahead 

      } 
     } 

     @Override 
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
      switch (requestCode) { 
       case REQUEST_RUNTIME_PERMISSION: 
        final int numOfRequest = grantResults.length; 
        final boolean isGranted = numOfRequest == 1 
          && PackageManager.PERMISSION_GRANTED == grantResults[numOfRequest - 1]; 
        if (isGranted) { 
         // you have permission go ahead 
        }else{ 
         // you dont have permission show toast 
        } 
        break; 
       default: 
        super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
      } 
     } 
0
private void requestPermission() { 

    int writePermission = ContextCompat.checkSelfPermission(
      MyActivity.this, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    if (writePermission != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     // if (ActivityCompat.shouldShowRequestPermissionRationale(
     // MyActivity.this, 
     // Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
     // 
     // // Show an expanation to the user *asynchronously* -- don't 
     // // block 
     // // this thread waiting for the user's response! After the user 
     // // sees the explanation, try again to request the permission. 
     // 
     // } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat 
       .requestPermissions(
         MyActivity.this, 
         new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
         MY_PERMISSIONS_WRITE_TO_EXTERNAL_STORAGE); 

     // MY_PERMISSIONS_WRITE_TO_EXTERNAL_STORAGE is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
     // } 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_WRITE_TO_EXTERNAL_STORAGE: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // permission-related task you need to do. 

      } else { 

       MyActivity.this.finish(); 
       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

내가, 여기에 WRITE_EXTERNAL_STORAGE 권한을 사용했다.

u가 필요한 requestPermission() 메서드를 호출 한 다음 장치에서 pdf 또는 이미지를 가져옵니다.

희망이 도움이됩니다.

0

답장을 보내 주셔서 감사합니다.하지만 질문에 언급하는 것을 잊어 버렸지 만 태그를 달았습니다. 저는 Xamarin 기술에 대한 답변을 찾고있었습니다.

시간이 지났지 만 그 시간이 지나면 결국 해결책을 찾았습니다. 그것은 더 적은 코드 조각입니다 :

 private bool HandlAndroidRuntimePermissions(Intent intent) 
     { 
      const int toastTimeout = 5; 
      const string permissionName = "File Drop"; 

      try 
      { 
       PermissionStatus status; 
       using (var checkPermissionStatusAsync = CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage)) 
       { 
        status = checkPermissionStatusAsync.Result; 
       } 

       if (status != PermissionStatus.Granted) 
       { 
        using (var shouldShowRequestPermissionRationaleAsync = CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Storage)) 
        { 
         if (shouldShowRequestPermissionRationaleAsync.Result) 
         { 
          UserDialogs.Instance.Toast(
           string.Format(Core.Resources.Resource.DocumentPickerModalViewModel_AndroidPermissionWrapper_RequestPermissionRationale, Permission.Storage, permissionName), 
           TimeSpan.FromSeconds (toastTimeout)); 
         } 
        } 

        using (var requestPermissionsAsync = CrossPermissions.Current.RequestPermissionsAsync(Permission.Storage)) 
        { 
         requestPermissionsAsync.ContinueWith(task => 
         { 
          var permissionStatuses = task.Result; 
          status = permissionStatuses[Permission.Storage]; 
          if (status == PermissionStatus.Granted) 
          { 
           CopyDocumentFromDeviceToMyLibrary(intent); 
          } 
          UserDialogs.Instance.Toast(string.Format(Core.Resources.Resource.DocumentPickerModalViewModel_AndroidPermissionWrapper_PermissionNotGrant, Permission.Storage, permissionName), 
           TimeSpan.FromSeconds (toastTimeout)); 
         }); 
        } 
        return true; 
       } 
      } 
      catch (Exception) 
      { 
       UserDialogs.Instance.Toast(string.Format(Core.Resources.Resource.DocumentPickerModalViewModel_AndroidPermissionWrapper_ErrorOccured, Permission.Storage), 
        TimeSpan.FromSeconds (toastTimeout)); 
       return true; 
      } 

      return false; 
     } 
관련 문제