Я хочу предоставить своему приложению разрешение «Управление внешним хранилищем», и я нашел полезный пример в Google (https:/ /medium.com/@kezzieleo/manage-external-storage-permission-android-studio-java-9c3554cf79a7). Он работает, когда я помещаю его в MainActivity, но происходит сбой, когда я добавляю другой класс с показанным сообщением об ошибке:
Код: Выделить всё
Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
Код: Выделить всё
access_to_storage_button.setOnClickListener(new View.OnClickListener()
{
@RequiresApi(api = Build.VERSION_CODES.R)
@Override
public void onClick(View v)
{
CheckPermission checkPermission =
new CheckPermission(getApplicationContext(), MainActivity.this);
checkPermission.askPermissionBox(new String[]
{Manifest.permission.MANAGE_EXTERNAL_STORAGE}, MANAGE_EXTERNAL_STORAGE);
});
Код: Выделить всё
public class CheckPermission extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback
{
private Context mycontext;
private Activity myactivity;
CheckPermission(Context context, Activity activity)
{
this.myactivity = activity;
this.mycontext = context;
}
void askPermissionBox(String[] permissionArr, int requestCode)
{
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package", myactivity.getPackageName(), null);
intent.setData(uri);
storageActivityResultLauncher.launch(intent);
}
private ActivityResultLauncher storageActivityResultLauncher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback()
{
@Override
public void onActivityResult(ActivityResult result)
{
// Android is 11 (R) or above
if (Environment.isExternalStorageManager())
{
// Manage External Storage Permissions Granted
Log.d("TAG", "onActivityResult: Manage External Storage Permissions Granted");
}
else
{
Toast.makeText(myactivity, "Storage Permissions Denied", Toast.LENGTH_SHORT).show();
}
}
});
Код: Выделить всё
myActivity.storageActivityResultLauncher.launch(intent);
Подробнее здесь: https://stackoverflow.com/questions/791 ... ther-class