2016-10-22 2 views
0

메모의 사용자 지정 목록보기와 새 메모 추가를위한 단추를 보여주는 응용 프로그램을 개발 중입니다. 사용자가 버튼을 클릭하면 앱은 전체 화면 대화 상자를 표시하여 몇 가지 추가 정보와 함께 메모를 추가합니다. 사용자는 첨부 파일 버튼을 클릭하면 메모가있는 첨부 파일을 업로드 할 수도 있습니다. 하지만 문제는 입니다. Android M (API 23)이 작업을 수행하려면 런타임 권한이 필요합니다.Android에서 사용자 지정 대화 상자의 런타임 권한 요청

Google Developers에 따르면 허가 요청의 결과는 onRequestPermissionsResult() 방법으로 전달됩니다. 전체 화면 대화 상자를 표시하는 데 사용한 결과에서 어떻게 결과를 얻을 수 있는지 모르겠습니다.

이 내 방법은 모습입니다 같은 :

private void showCreateNoteDialog() { 

    //create dialog body... 
    final Dialog createDialog = new Dialog(NotesActivity.this,R.style.MyFullscreenDialog); 
    createDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    LayoutInflater inflater = this.getLayoutInflater(); 
    createDialog.setContentView(inflater.inflate(R.layout.customdialog_createNote, null)); 
    createDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);} 

편집 :

사용 권한은 파일을 업로드에 필요한되는 SD 카드 또는 외부 저장 장치에서 읽기

+0

합니다. 대화 상자를 표시하려고 할 때 앱이 다운 되었습니까? –

+0

어떤 권한을 요청 하시겠습니까 ?? – Sanjeet

+0

@SrikarReddy 문제에 대한 내 종류 설명에 대해 죄송합니다.하지만 메모가있는 첨부 파일을 업로드하려면 사용자의 SD 카드를 읽을 권한이 필요합니다. – Intimate

답변

0

음을 런타임 라이브러리의 통합은 유용한 라이브러리를 사용하면 훨씬 쉽습니다. 가장 좋아하는 라이브러리는 PermissionUtils입니다.

당신이해야 할 모든 활동

PermissionManager.with(YourActivity.this) 
    .permission(PermissionEnum.READ_PHONE_STATE, PermissionEnum.READ_EXTERNAL_STORAGE) // You can put all permissions here 
    .askagain(true) 
    .ask(); 

하고 그게 그것의 onCreatebuild.gradle

dependencies { 
    compile 'rebus:permission-utils:1.0.3' 
} 

다음 응용 프로그램 수준에서 종속성을 컴파일합니다. 더 많은 정보를 찾을 수 있습니다 here

희망이 있습니다.

0

다음과 같이 시도해보십시오.

if (ContextCompat.checkSelfPermission(thisActivity, 
      Manifest.permission.READ_EXTERNAL_STORAGE) 
    != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
     Manifest.permission.READ_EXTERNAL_STORAGE)) { 

     // Show an explanation 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(thisActivity, 
      new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
      MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 

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

이것은 런타임 권한을 구현하는 방법입니다. 자세한 내용은 official developer site을 확인하십시오. 또한 실행시 요청해야하는 권한에 대한 자세한 내용을 보려면 Normal and Dangerous Permissions을 확인하십시오.

+0

결과는 어떻게됩니까? 우리의 방법으로 결과를 얻는 방법? – Intimate

+0

사용자가 요청을 수락하면'FileInputStream'을 사용하여 SD 카드에서 데이터를 읽을 수 있습니다. 이 도움이되기를 바랍니다 http://stackoverflow.com/a/10550036/4402462 –

0

당신은 바로 당신 showCreateNoteDialog 방법의 결과를 얻을 수 있지만, 당신이 (의사 코드) 무엇을 할 수 있습니다 : 당신은 권한 대화 상자를 표시하도록 요청할 필요가 없습니다

showCreateNoteDialog() { 
    /* some code goes here */ 
    if (checkPermission) { 
     newMethodCalledFromNoteDialog(); 
    } else { 
     requestPermission(); 
     // return? 
    } 
} 

newMethodCalledFromNoteDialog() { 
     // part of code which needs permission 
     // some code depending on previous code 
} 

onRequestPermissionsResult() { 
    if (permissionGranted) { 
     newMethodCalledFromNoteDialog(); 
    } 
} 
관련 문제