0

我试图通过我的应用程序更改我的系统/手机亮度。为此,我需要征求许可(“危险许可”)。我不确定我是否已经采用了正确的方式,但这看起来并不奏效,因为它总是返回拒绝权限。Android工作室危险权限

public void switches() { 
      if (systemBrightness) { 
       ActivityCompat.requestPermissions(MainActivity.this, 
         new String[]{Manifest.permission.WRITE_SETTINGS}, 
         1); 
       Toast.makeText(this, "Changed to system brightness: changing the “system brightness” is permanent", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(this, "Changed to screen brightness: ", Toast.LENGTH_SHORT).show(); 
      } 
     } 


public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 1: { 

       // 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. 
        Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show(); 
       } 
       return; 
      } 

      // other 'case' lines to check for other 
      // permissions this app might request 
     } 
    } 

//玛尼巨星

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.FLASHLIGHT" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 




    public void changeScreenBrightness(float brightness) { 
     mBrightness = brightness; 
     if (systemBrightness) { 
      if (!Settings.System.canWrite(this)) { 
       Intent i = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); 
       startActivity(i); 
      } else { 
       Settings.System.putInt(mContentResolver, Settings.System.SCREEN_BRIGHTNESS, (int) (mBrightness * 255)* preset); 
      } 
     } else { 
      WindowManager.LayoutParams mLayoutParams = mWindow.getAttributes(); 
      mLayoutParams.screenBrightness = mBrightness * preset; 
      mWindow.setAttributes(mLayoutParams); 
     } 
    } 
+0

无错误可见,以便far..did你把'WRITE_SETTINGS'许可清单中? – Pzy64

+0

我已将我的清单权限添加到问题 – Amar

+0

真的,没有人能指出我正确的方向? – Amar

回答

1

问计风险的权限比脆弱的权限处理方式不同。您需要使用Settings.System.canWrite(Context)方法来检查您是否可以这样做。如果不通过调用startActivityForResult发送合适的Intent到系统:

public boolean checkWriteSettingsPermission() { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
     return true; 
    } 
    if (!Settings.System.canWrite(getContext())) { 
     Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, 
      Uri.parse("package:" + getPackageName())); 
     startActivityForResult(intent, REQUEST_CODE); 
     return false; 
    } else { 
     return true; 
    } 
} 

一切都写在documentation

+0

我已经编辑了我的问题的意图权限。我现在正在起床一个新的意图/窗口,标题为“Aviability”。但在这里任何地方都不会让我接受允许应用程序更改系统屏幕亮度 – Amar

+0

自动亮度设置?检查此答案:https://stackoverflow.com/a/36001592/6507689 –

+0

好的,但这是一个过时的答案。因为自从我的API级别应用程序是23在清单中的权限声明不会工作? – Amar