2016-10-22 5 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です。

あなたがする必要があるすべてはあなたの活動のonCreate

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

で、その後build.gradle

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

アプリレベルで依存関係をコンパイルされ、それのthats。詳細はこちら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(); 
    } 
} 
関連する問題