6

外部ストレージの読み取りと書き込みの許可を必要とするアンドロイドアプリを開発しています。私の要件は、ギャラリーから画像を選択し、私のアプリで使用することです。マシュマロの装置を除いてすべてがうまくいきます。私はマシュマロの許可を与えたい。誰もこれで私を助けることができますか?marshmallowのストレージとギャラリーの使用に関する読み取りと書き込みの許可

+0

osレベルによって権限は変更されません。以下と同じです。

+0

私はすでにmanifeast ..しかし、その許可を与えているアプリマシュマロのユーザーがギャラリーから画像を選択するとクラッシュします。許可の意味は – tiger

+0

です。それはあなたが実行時に許可についてmarshmallowのユーザに尋ねなければならないことです。 –

答えて

15

それは...

Runtime permissions - Android Mits reference projectを通じて読む
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{ 

    private static final int REQUEST_WRITE_PERMISSION = 786; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == REQUEST_WRITE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {    
     openFilePicker(); 
    } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    requestPermission(); 
    } 

    private void requestPermission() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION); 
    } else { 
     openFilePicker(); 
    } 
    } 
} 
2

を、次のような何かを達成することができます。

アクセス許可のフローが変更され、実行時に、必要に応じて、実行時に要求されるアクセス許可が必要です。同じ権限で、許可グループにもつながるNormal and Dangerousに分類されています。

0

さらに、複数のアクセス権を要求する場合。あなたはこれを行うことができます。

private ArrayList<String> permisos; 

private void someMethod() 
{ 
     .. 

     verificarPermisos(Manifest.permission.READ_EXTERNAL_STORAGE); 
     verificarPermisos(Manifest.permission.ACCESS_FINE_LOCATION); 
     verificarPermisos(Manifest.permission.ACCESS_COARSE_LOCATION); 
     if (permisos.size()!=0) 
     { 
     solicitarPermisos(permisos.toArray(new String[permisos.size()])); 
     } 

     .. 

} 


@TargetApi(23) 
void verificarPermisos(String permiso){ 
    if (ContextCompat.checkSelfPermission(this,permiso) 
      != PackageManager.PERMISSION_GRANTED) { 
     permisos.add(permiso); 
     // Should we show an explanation? 
     if (shouldShowRequestPermissionRationale(permiso)) { 

     } 

    } 
} 

@TargetApi(23) 
void solicitarPermisos(String[] permiso){ 

    requestPermissions(permiso, 1); 

} 

まず許可がすでに "verificarPermisos()" メソッドを付与されているかどうか、私は確認してください。もしそれらが与えられなければ、私はそれらを "permisos" arraylistに加えます。最後に、許可されていないパーミッションが返され、String []配列形式で渡されます。

MashMellow(API 23)以降でしかアクセス許可を要求できないことに注意してください。アプリがMashMellowの前にアンドロイド版をターゲットにしている場合は、 "@TargetApi()"注釈を使用でき、ターゲットがAPI 23以上の場合にのみアクセス許可メソッドが呼び出されます。
挨拶を手助けしてください。

関連する問題