运行 Marshmallow 更新设备中的时间权限弹出点击问题
Run time Permission popup click issue in Marshmallow Updated devices
我为 Marshmallow 设备集成了 Android READ PHONE STATE
运行时权限。此实现工作正常,弹出窗口显示在我的应用程序中,带有 allow/deny 选项。
我可以点击普通棉花糖设备的允许/拒绝按钮。但是在更新的 android 设备(从 Lollipop 到 Marshmallow)的情况下,允许按钮点击在初始时间不起作用。此问题已在 Nexus 5 和 Nexus 7 中测试和重现。我们是否需要为更新的 OS 创建额外的内容?还是棉花糖问题?
完整代码请查看:
private static final int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 101;
if (Build.VERSION.SDK_INT >= 23) {
if(mActivity.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) !=PackageManager.PERMISSION_GRANTED) {
if (this.shouldShowRequestPermissionRationale(
Manifest.permission.READ_PHONE_STATE)) {
showExplanationDialog(mActivity, getString(R.string.dialog_message_phone_state));
} else {
this.requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE},
MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
}
} else {
handleLoginAPI();
}
} else {
handleLoginAPI();
}
private void handleLoginAPI() {
if (super.isNetworkConnectionAvailable(mActivity)) {
// Api Call from here..
}else{
// No Nw Connection.
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
handleLoginAPI();
} else if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_DENIED) {
if (this.shouldShowRequestPermissionRationale(
Manifest.permission.READ_PHONE_STATE)) {
showExplanationDialog(mActivity, getString(R.string.dialog_message_phone_state));
}
}
return;
}
}
}
在请求权限之前不要调用 shouldShowRequestPermissionRationale()
。该调用旨在在用户拒绝请求后进行,通常在 onRequestPermissionsResult()
方法中。如果您的应用需要在请求权限之前解释为什么需要权限,则应用的内部逻辑需要做出决定。
private void setCheck()
{
int hasWriteContactsPermission = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
hasWriteContactsPermission = checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE);
if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
if (!shouldShowRequestPermissionRationale(android.Manifest.permission.READ_PHONE_STATE)) {
showLocationRationleDalog();
return;
}
return;
} else {
handleLoginAPI();
}
} else {
handleLoginAPI();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length == 1
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
handleLoginAPI();
} else {
Log.i("Permission denied");
}
return;
}
}
}
这是一个 Android OS 更新问题。 Nexus 设备中报告了该问题。 https://code.google.com/p/android/issues/detail?id=213120。该问题可以在其他 android 本机应用程序中重现,例如 Google 地图、Gmail 等
我为 Marshmallow 设备集成了 Android READ PHONE STATE
运行时权限。此实现工作正常,弹出窗口显示在我的应用程序中,带有 allow/deny 选项。
我可以点击普通棉花糖设备的允许/拒绝按钮。但是在更新的 android 设备(从 Lollipop 到 Marshmallow)的情况下,允许按钮点击在初始时间不起作用。此问题已在 Nexus 5 和 Nexus 7 中测试和重现。我们是否需要为更新的 OS 创建额外的内容?还是棉花糖问题?
完整代码请查看:
private static final int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 101;
if (Build.VERSION.SDK_INT >= 23) {
if(mActivity.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) !=PackageManager.PERMISSION_GRANTED) {
if (this.shouldShowRequestPermissionRationale(
Manifest.permission.READ_PHONE_STATE)) {
showExplanationDialog(mActivity, getString(R.string.dialog_message_phone_state));
} else {
this.requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE},
MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
}
} else {
handleLoginAPI();
}
} else {
handleLoginAPI();
}
private void handleLoginAPI() {
if (super.isNetworkConnectionAvailable(mActivity)) {
// Api Call from here..
}else{
// No Nw Connection.
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
handleLoginAPI();
} else if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_DENIED) {
if (this.shouldShowRequestPermissionRationale(
Manifest.permission.READ_PHONE_STATE)) {
showExplanationDialog(mActivity, getString(R.string.dialog_message_phone_state));
}
}
return;
}
}
}
在请求权限之前不要调用 shouldShowRequestPermissionRationale()
。该调用旨在在用户拒绝请求后进行,通常在 onRequestPermissionsResult()
方法中。如果您的应用需要在请求权限之前解释为什么需要权限,则应用的内部逻辑需要做出决定。
private void setCheck()
{
int hasWriteContactsPermission = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
hasWriteContactsPermission = checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE);
if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
if (!shouldShowRequestPermissionRationale(android.Manifest.permission.READ_PHONE_STATE)) {
showLocationRationleDalog();
return;
}
return;
} else {
handleLoginAPI();
}
} else {
handleLoginAPI();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length == 1
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
handleLoginAPI();
} else {
Log.i("Permission denied");
}
return;
}
}
}
这是一个 Android OS 更新问题。 Nexus 设备中报告了该问题。 https://code.google.com/p/android/issues/detail?id=213120。该问题可以在其他 android 本机应用程序中重现,例如 Google 地图、Gmail 等