我试图获得一个弹出窗口,要求用户授予在启动期间访问外部存储的权限。我有一个活动名称 Start,它是我的 Launcher 活动。通过此活动,我声明了一些全局变量并创建了一些目录(如果不存在)。为此,我需要对外部存储的权限。我已经实现了在 developer.android.com 上共享的代码,但它没有授予我所需的权限。
我认为这不起作用,因为请求用户输入的弹出窗口未显示,因为 layout.activity_wait 尚不可见,因此我应该将我的代码分发到 AsyncTask 中,以便在调用 requestPermissions 之前 layout.activity_wait 可见。
下面的代码没有 AsyncTask(是的,我知道应用程序也应该能够在没有权限的情况下工作,我将在稍后阶段构建它:))。请让我知道您对此有何看法。谢谢!
public class Start extends AppCompatActivity {
/**
set a bunch of variables to be used in all activities
**/
public static ...
public static ... ...
public static int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wait);
checkPermission();
/**
do some stuff at startup, like creating some directories if not already present
**/
launchIntent(this, Home.class); //launch the home screen after initializing all variables and creating directories
finish();
}
private void checkPermission() {
if (ContextCompat.checkSelfPermission(Start.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
Log.d("permission", "NOT granted");
ActivityCompat.requestPermissions(Start.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}else{
Log.d("permission", "granted");
}
}
}
谢谢@Mike M. 设法让它工作。我不明白 onRequestPermissionsResult() 的目的。现在我知道了。请参阅下面的我的代码。
public class Start extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {
/**
set a bunch of variables to be used in all activities
**/
public static ...
public static ... ...
public static int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wait); //this is a view with a progress bar
checkPermission();
}
private void permissionsGranted() {
/**
do some stuff at startup, like creating some directories if not already present
**/
launchIntent(this, Home.class); //launch the home screen after initializing all variables and creating directories
finish();
}
private void checkPermission() {
if (ContextCompat.checkSelfPermission(Start.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// do this if permisisons have not yet been granted
Log.d("permission", "NOT granted");
ActivityCompat.requestPermissions(Start.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}else{
// if the permissions have already been granted do the following
Log.d("permission", "granted");
permissionsGranted();
}
}
// this is required when ActivityCompat.requestPermissions() is called
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// if permissions have been granted, do the following
permissionsGranted();
} else {
// possibly prompt why permissions are required and try again
}
return;
}
// other 'case' lines to check for other
// permissions this app might request.
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句