Java'da program yazarken galeri erişimine ihtiyacım var fakat uygulamayı çalıştırdığımda izin istemeden "permission needed!" toast mesajını veriyor. Manifest bölümünde de tam olarak izinleri tanımladım aslında. Sebebi nedir?
Java:
Uri imageData;
ActivityResultLauncher<Intent> activityResultLauncher;
ActivityResultLauncher<String> permissionLauncher;
private ActivityUploadBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityUploadBinding activityBinding = ActivityUploadBinding.inflate(getLayoutInflater());
View view = activityBinding.getRoot();
setContentView(view);
binding = activityBinding;
registerLauncher();
}
public void publish_btn(View view){
}
public void selectImg(View view) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
Snackbar.make(view, "Permission needed for gallery", Snackbar.LENGTH_INDEFINITE)
.setAction("Give permission", new View.OnClickListener() {
@Override
public void onClick(View view) {
// İzin izleme başlatıcısını çağırmak için hemen burada izin isteği yapılmalıdır.
permissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE);
}
}).show();
} else {
// İzin izleme başlatıcısını çağırmak için hemen burada izin isteği yapılmalıdır.
permissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE);
}
} else {
// İzinler zaten varsa, galeriye gitmek için intent başlatılır.
Intent intentToGallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
activityResultLauncher.launch(intentToGallery);
}
}
private void registerLauncher() {
activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == RESULT_OK) {
Intent intentFromResult = result.getData();
if(intentFromResult != null) {
imageData = intentFromResult.getData();
binding.selectImg.setImageURI(imageData);
}
}
}
});
permissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), new ActivityResultCallback<Boolean>() {
@Override
public void onActivityResult(Boolean result) {
if(result) {
// İzin verildiğinde, galeriye gitme işlemi yeniden başlatılır.
Intent intentToGallery = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
activityResultLauncher.launch(intentToGallery);
} else {
// Kullanıcı izin vermediğinde bir uyarı mesajı gösterilir.
Toast.makeText(UploadActivity.this,"Permission needed!", Toast.LENGTH_LONG).show();
}
}
});
}
}
Son düzenleyen: Moderatör: