当弹出权限对话框时,它会询问我是否要允许或拒绝某个权限。问题是,当我允许或拒绝时,动作不会执行。我如何知道他是否允许,以便我可以在接受时执行操作?
我试过:
int hasWriteExternalStoragePermission = ctx.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasWriteExternalStoragePermission == PackageManager.PERMISSION_GRANTED) {
// my code
}
但它没有执行,因为“为时已晚”
请尝试以下方法:
public boolean isStoragePermissionGranted()
{
if (Build.VERSION.SDK_INT >= 23)
{
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED)
{
Log.v(TAG,"Permission is granted");
return true;
}
else
{
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else
{
//permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted <23");
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED)
{
Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
//resume tasks needing this permission
}
else
{
Log.v(TAG,"Permission denied");
}
}
这样,如果获得许可,它会来到这里:
如果尚未授予权限,则会出现以下情况:
Log. v(TAG,“权限被撤销”);
并尝试获取权限。如果用户在运行时授予权限:
如果用户拒绝:
如果版本低于Marshamla,即低于API 23
,那么它会出现在这里:
Log. v(TAG,"授予权限
您需要重写此方法
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
链接到官方文档
您必须覆盖onRequest estPermissionsResult
函数,您将获得权限对话框弹出
的回调。
像下面
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted
} else {
// permission denied
// ask again or ignore
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
问题内容: 我已经阅读了两天的信息和样本,但不确定此后是否完成了所有身份验证过程。 我怎么知道我是否已登录,例如,我将有一个带有登录或注销按钮的导航栏,下面是否有一些变量,如代码? 问题答案: 如果用户已登录,则将为中的每个请求创建一个对象,您可以检查任何中间件是否存在: 您可以为此创建简单的中间件,该中间件将检查用户是否已登录,如果没有,则将重定向到页面: 并使用它:
问题内容: 当我使用mmap创建写时复制映射(MAP_PRIVATE)时,此映射的某些页面将在我写入特定地址后立即复制。在程序的某个时刻,我想弄清楚实际上已复制了哪些页面。有一个名为“ mincore”的调用,但仅报告该页面是否在内存中,这与正在复制的页面不同。 有什么办法可以确定哪些页面已被复制? 问题答案: 好的,按照MarkR的建议,我试了一下它来浏览pagemap和kpageflags界面
我有一个简单的JavaFX应用程序,它允许用户查询数据库并查看表中的数据。 我使用的是标准的javafx.Scene.Control.TableView类。是否有一种简单的方法来启用单元格复制?我做了一些搜索,我看到其他人创建自定义菜单命令...我不想创建一个自定义菜单,我只想要基本的键盘复制与单细胞工作。 我使用的是单一选择模式,但如果需要,我可以更改为其他模式:
我有两个域名。 我尝试使用JavaScript标记,在用户对域2进行一些操作之后,使用一切正常,但在最后一步,我得到了跨原点错误。 如何在PHP中允许访问域1上的跨源? 编辑 我的问题不是这个问题的可能重复,因为我问的是PHP。 解决方案 只需在打开PHP标签后的代码开头添加,这将允许从任何来源(网站)进行访问。 如果要限制访问,请将替换为源站(网站)url,如
问题内容: 我有一个表格,基本上是上传一个文件。我要提交两次表格,第1次不包含多部分,第二次1次包含多部分。 但是我想先检查一下第一次提交表单是否成功,然后再进行第二次提交 引用@Vern后编辑 这是我的servlet部分。我在哪里确定它是否由多个部分组成。如果未将 resultType 存储到会话变量中,则返回, 现在,我要检查此“已 提交 ”或类似内容,然后第二次提交表格。 第二表单提交:在这
如果all调用ActivityCompat.RequestPermissions(),则OS显示一个带有Deny或Permissions按钮的对话框。还有一个“永不再次显示这个”勾选框。 但是,我无法让应用程序知道用户是否勾选了这个框--在onRequestPermissionsResult()中,如果用户单击Deny,以及如果用户在单击Deny之前勾选了这个勾选框,那么grantResults参