溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Android 6.0以上權(quán)限拒絕打開(kāi)權(quán)限設(shè)置界面的問(wèn)題

發(fā)布時(shí)間:2021-07-16 14:51:13 來(lái)源:億速云 閱讀:168 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)如何解決Android 6.0以上權(quán)限拒絕打開(kāi)權(quán)限設(shè)置界面的問(wèn)題,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

實(shí)例如下

第一步是跳轉(zhuǎn)到系統(tǒng)的界面,下面基本上可以從9開(kāi)始考慮了,可以簡(jiǎn)化。

String SCHEME = "package";
  //調(diào)用系統(tǒng)InstalledAppDetails界面所需的Extra名稱(用于Android 2.1及之前版本)
  final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";
  //調(diào)用系統(tǒng)InstalledAppDetails界面所需的Extra名稱(用于Android 2.2)
  final String APP_PKG_NAME_22 = "pkg";
  //InstalledAppDetails所在包名
  final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";
  //InstalledAppDetails類名
  final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";
 
  Intent intent = new Intent();
  final int apiLevel = Build.VERSION.SDK_INT;
  if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的接口
   intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
   Uri uri = Uri.fromParts(SCHEME, getPackageName(), null);
   intent.setData(uri);
  } else { // 2.3以下,使用非公開(kāi)的接口(查看InstalledAppDetails源碼)
   // 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。
   final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22
     : APP_PKG_NAME_21);
   intent.setAction(Intent.ACTION_VIEW);
   intent.setClassName(APP_DETAILS_PACKAGE_NAME,
     APP_DETAILS_CLASS_NAME);
   intent.putExtra(appPkgName, getPackageName());
  }
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(intent);

第二個(gè),miui,首先你得判斷是miui,親自測(cè)試,MIUI7穩(wěn)定版,MIUI8開(kāi)發(fā)板本可行,工具類下面會(huì)提供下載

if (CheckPhoneSystemUtils.isMIUI()) {
   MLog.i("產(chǎn)品/硬件的制造商小米:");
   intent.setAction("miui.intent.action.APP_PERM_EDITOR");
   intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
   intent.putExtra("extra_pkgname", getPackageName());
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   try {
    startActivity(intent);
   } catch (Exception e) {
    e.printStackTrace();
    Toast.makeText(MediaRecoderService.this, "只有MIUI才可以設(shè)置哦", Toast.LENGTH_SHORT).show();
   }
  }

第三個(gè),flyme(由于沒(méi)有flyme機(jī)子),采用的云手機(jī)測(cè)試的

else if (CheckPhoneSystemUtils.isFlyme()) {
   intent.setAction("com.meizu.safe.security.SHOW_APPSEC");
   intent.addCategory(Intent.CATEGORY_DEFAULT);
   intent.putExtra("packageName", getPackageName());
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   try {
    startActivity(intent);
   } catch (Exception e) {
    e.printStackTrace();
    Toast.makeText(MediaRecoderService.this, "只有Flyme才可以設(shè)置哦", Toast.LENGTH_SHORT).show();
   }
  }

下面是工具類:BuildProperties

public class BuildProperties {
 private final Properties properties;
 
 private BuildProperties() throws IOException {
  properties = new Properties();
  properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));
 }
 
 public boolean containsKey(final Object key) {
  return properties.containsKey(key);
 }
 
 public boolean containsValue(final Object value) {
  return properties.containsValue(value);
 }
 
 public Set<Map.Entry<Object, Object>> entrySet() {
  return properties.entrySet();
 }
 
 public String getProperty(final String name) {
  return properties.getProperty(name);
 }
 
 public String getProperty(final String name, final String defaultValue) {
  return properties.getProperty(name, defaultValue);
 }
 
 public boolean isEmpty() {
  return properties.isEmpty();
 }
 
 public Enumeration<Object> keys() {
  return properties.keys();
 }
 
 public Set<Object> keySet() {
  return properties.keySet();
 }
 
 public int size() {
  return properties.size();
 }
 
 public Collection<Object> values() {
  return properties.values();
 }
 
 public static BuildProperties newInstance() throws IOException {
  return new BuildProperties();
 }

CheckPhoneSystemUtils

 private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
 private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
 private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
 
 /**
  * 檢測(cè)MIUI
  *
  * @return
  */
 public static boolean isMIUI() {
  try {
   final BuildProperties prop = BuildProperties.newInstance();
   return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
  } catch (final IOException e) {
   return false;
  }
 }
 
 /**
  * 檢測(cè)Flyme
  *
  * @return
  */
 public static boolean isFlyme() {
  try { // Invoke Build.hasSmartBar()
   final Method method = Build.class.getMethod("hasSmartBar");
   return method != null;
  } catch (final Exception e) {
   return false;
  }
 }

關(guān)于“如何解決Android 6.0以上權(quán)限拒絕打開(kāi)權(quán)限設(shè)置界面的問(wèn)題”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI