任何人都可以帮助我如何检查片段活动中是否授予读取和写入外部存储权限?但它不起作用。
即使对 Activity 有效,代码也无法传递条件。
StorageReference storageReference;
private static final int IMAGE_REQUEST = 1;
private Uri imageUri;
private StorageTask uploadTask;
private int STORAGE_PERMISSION_CODE = 1;
这是权限检查代码:
String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
if(ContextCompat.checkSelfPermission(getActivity(),
permissions[0]) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(getActivity(),
permissions[1]) == PackageManager.PERMISSION_GRANTED){
openImage();
Toast.makeText(getActivity(), "Wow", Toast.LENGTH_SHORT).show();
}
else{
requestStoragePermission();
}
上传方法和覆盖权限方法代码如下链接:
//Bulid popup for Storagr permission
private void requestStoragePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.READ_EXTERNAL_STORAGE)) {
new AlertDialog.Builder(getActivity())
.setTitle("Permission needed")
.setMessage("This permission is needed to read your Storage")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(getActivity(),
new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
}
})
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == STORAGE_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "Permission GRANTED", Toast.LENGTH_SHORT).show();
openImage();
} else {
Toast.makeText(getActivity(), "Permission DENIED", Toast.LENGTH_SHORT).show();
}
}
}
//End code for Stroage Permission
//This code for Upload the Image from your Stroage
private void openImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, IMAGE_REQUEST);
}
private String getFileExtension(Uri uri){
ContentResolver contentResolver = getActivity().getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}
private void uploadImage(){
final ProgressDialog pd = new ProgressDialog(getActivity());
pd.setMessage("Uploading");
pd.show();
if (imageUri != null){
final StorageReference fileReference = storageReference.child(System.currentTimeMillis()
+"."+getFileExtension(imageUri));
uploadTask = fileReference.putFile(imageUri);
uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()){
throw task.getException();
}
return fileReference.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()){
Uri downloadUri = task.getResult();
mUri = downloadUri.toString();
if (upType.equals("Profile"))
{
reference = FirebaseDatabase.getInstance().getReference("UserInfo").child(userID);
HashMap<String, Object> map = new HashMap<>();
map.put("image_url", ""+mUri);
reference.updateChildren(map);
pd.dismiss();
}
else if (upType.equals("Cover"))
{
reference = FirebaseDatabase.getInstance().getReference("UserInfo").child(userID);
HashMap<String, Object> map = new HashMap<>();
map.put("coverUri", ""+mUri);
reference.updateChildren(map);
pd.dismiss();
}
} else {
Toast.makeText(getContext(), "Failed!", Toast.LENGTH_SHORT).show();
pd.dismiss();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
pd.dismiss();
}
});
} else {
Toast.makeText(getContext(), "No image selected", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null){
imageUri = data.getData();
if (uploadTask != null && uploadTask.isInProgress()){
Toast.makeText(getContext(), "Upload in preogress", Toast.LENGTH_SHORT).show();
} else {
uploadImage();
}
}
}