6

我正在开发一个android应用程序,它需要为读写外部存储提供权限。我的要求是从图库中选择一张图片并在我的应用程序中使用它。一切工作都很好,除了棉花糖设备。我想提供棉花糖的许可。谁能帮我这个?棉花糖的存储和图库使用的读取和写入权限

+0

权限不会根据os级别而改变。它与以下相同。 <使用权限android:name =“android.permission.WRITE_EXTERNAL_STORAGE”/> <使用权限android:name =“android.permission.READ_EXTERNAL_STORAGE”/> –

+0

我已经在我的manifest中给予该权限..但是应用程序碰撞时,棉花糖用户从图库中选择图像.. saying权限用餐 – tiger

+0

其无关紧要的权限是不同的。它是关于你必须问在棉花糖的用户在运行时的权限 –

回答

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。最后,未经授权的权限被重新设置为以字符串[]数组格式传递。

请注意,您只能从MashMellow(API 23)或更高版本请求权限。因此,如果您的应用在MashMellow之前也瞄准了Android版本,则可以使用“@TargetApi()”注释,并且仅当目标为API 23或更高版本时才会调用权限方法。
希望能帮助,问候。