2016-12-18 4 views
2

Androidアプリでは、外部ストレージに書き込む権限が必要です。 Android 6以降、実行時にアクセス許可を尋ねる必要があります。Android:アクセス許可を求めるときに引数を渡す(Android 6)

私の問題は、私の関数がアクセス権を要求した後に "失われた"引数(soundId)を渡したため、アクセス権を求めた後に元のタスクを再開する方法がわかりません。権限を求めるときに引数を渡すには?

MainActivity.java

static final int REQ_CODE_EXTERNAL_STORAGE_PERMISSION = 45; 

public static void sharesound(int soundId, final Context context){ 
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) 
{ 
    CopyRAWtoSDCard(soundId, soundpath,context); 
} 

else 
{ 
    ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQ_CODE_EXTERNAL_STORAGE_PERMISSION); 
} 
} 



@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (requestCode == REQ_CODE_EXTERNAL_STORAGE_PERMISSION && grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
    { 
     sharesound(soundId,getApplicationContext()); **I cannot access soundId from here !** 
    } 
} 
+0

このアクティビティのフィールドに「soundId」を挿入します。 – CommonsWare

答えて

3

EDITをメソッドを呼び出す前に、パーミッションのチェックを追加しました: //これは古くなっているので、ContentProviderやFileproviderを使う必要はありません。

は、私は今、自分で解決策を見つけた:

まず、我々はグローバル変数が必要になります。

int lastsharedsound; 

はその後、sharesound機能はその変数への最後の共有の音が保存されます。

public static void sharesound(int soundId) 
{ 
    lastsharedsound=soundId; 
    if (ActivityCompat.checkSelfPermission(context,Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) 
    { 
     CopyRAWtoSDCard(soundId, soundpath,context); 
     ***do the intent sharing stuff here*** 
    } 

    else 
    { 
     ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},  5); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 
{ 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (requestCode == 5 && grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
    { 
     sharesound(lastsharedsound); ***Here we call our function again*** 
    } 
} 
0
public static void sharesound(int soundId, final Context context){ 
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) 
{ 
    CopyRAWtoSDCard(soundId, soundpath,context); 
} 

else 
{ 
    ActivityCompat.requestPermissions((Activity) context, new String[ {Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQ_CODE_EXTERNAL_STORAGE_PERMISSION); 
    if(ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){ 
     sharesound(soundId, context); 
    } 
} 
} 

編集:

私のコードは次のようになり 私は再び

+0

ありがとう、それは本当に動作しません、私は(再帰的に音を共有しようとしているように思われる)アプリケーションがハングアップをクリックした場合 私が受け入れる場合、共有ダイアログが開きますが、ファイルがストレージにコピーされません。 – computerjulian

+0

まだ助けてくれてありがとう、ありがとう、私はあなたの編集を試みたが、株式の2番目の呼び出しは実行されません。私はそこにトーストを入れて、それも現れなかった。機能がユーザーが要求許可ダイアログに答えるのを待っていないようです。それはちょうど続く – computerjulian

関連する問題