棉花糖不会显示权限 window
Marshmallow won't show permission window
我有一个需要写日历的应用程序现在考虑 "critical" 所以我遵循指南 HERE 我在 Activity onCreate this cote
中添加了
private static final int REQUEST_WRITE_CALENDAR = 1453;
...
boolean hasPermission = (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_CALENDAR},
REQUEST_WRITE_CALENDAR);
}
但这并没有显示任何对话框。
此外,我似乎还应该添加此代码块来处理响应
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case REQUEST_WRITE_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(parentActivity, "The app was not allowed to write to your calendar.", Toast.LENGTH_LONG).show();
}
}
}
}
Android 目标 SDK 是 23,是正确的。所以问题的原因与possible duplicate question中提出的不同。
判断权限状态的逻辑可以简化为:
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_EXTERNAL_CALENDAR},
REQUEST_WRITE_CALENDAR);
}
您的 Activity
不必执行任何操作,覆盖 onRequestPermissionsResult
就足够了。
到问题的第二部分:
您可以在 activity 或片段中覆盖 onRequestPermissionsResult。如果你选择在片段而不是 activity 中这样做,你应该在你的 activity 中添加这样的东西(为了将回调传递给你的片段):
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
for (Fragment frag : getSupportFragmentManager().getFragments()) {
if (frag != null) {
frag.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
我有一个需要写日历的应用程序现在考虑 "critical" 所以我遵循指南 HERE 我在 Activity onCreate this cote
中添加了private static final int REQUEST_WRITE_CALENDAR = 1453;
...
boolean hasPermission = (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_CALENDAR},
REQUEST_WRITE_CALENDAR);
}
但这并没有显示任何对话框。
此外,我似乎还应该添加此代码块来处理响应
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case REQUEST_WRITE_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(parentActivity, "The app was not allowed to write to your calendar.", Toast.LENGTH_LONG).show();
}
}
}
}
Android 目标 SDK 是 23,是正确的。所以问题的原因与possible duplicate question中提出的不同。
判断权限状态的逻辑可以简化为:
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_EXTERNAL_CALENDAR},
REQUEST_WRITE_CALENDAR);
}
您的 Activity
不必执行任何操作,覆盖 onRequestPermissionsResult
就足够了。
到问题的第二部分:
您可以在 activity 或片段中覆盖 onRequestPermissionsResult。如果你选择在片段而不是 activity 中这样做,你应该在你的 activity 中添加这样的东西(为了将回调传递给你的片段):
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
for (Fragment frag : getSupportFragmentManager().getFragments()) {
if (frag != null) {
frag.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}