簡體   English   中英

調整屏幕亮度時WRENE_SETTINGS權限的SecurityException

[英]SecurityException for WRITE_SETTINGS permission while adjusting screen brightness

應用程序中間的按鈕在亮度之間切換,但是現在,如果按鈕被點擊兩次並且我再次嘗試點擊它它不再起作用。 有沒有人知道如何在第二次單擊按鈕后單擊按鈕之前將屏幕亮度置於先前狀態。 總的來說,點擊按鈕時應用程序會不斷收到錯誤日志。 如果有人能解決這個問題,請提前致謝! 這是錯誤日志:

W/System.err: java.lang.SecurityException: com.example.kenert.allinoneapp was not granted  this permission: android.permission.WRITE_SETTINGS.
W/System.err:     at android.os.Parcel.readException(Parcel.java:1684)
W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
W/System.err:     at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)
W/System.err:     at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1595)
W/System.err:     at android.provider.Settings$System.putStringForUser(Settings.java:1966)
W/System.err:     at android.provider.Settings$System.putIntForUser(Settings.java:2071)
W/System.err:     at android.provider.Settings$System.putInt(Settings.java:2065)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight$override.turnBrightnessOff(ScreenFlashlight.java:60)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight$override.screenFlashButtonClicked(ScreenFlashlight.java:28)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight$override.access$dispatch(ScreenFlashlight.java)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight.screenFlashButtonClicked(ScreenFlashlight.java:0)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
W/System.err:     at android.view.View.performClick(View.java:5637)
W/System.err:     at android.view.View$PerformClick.run(View.java:22429)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:154)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6119)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

這是該類的代碼:

import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageButton;

public class ScreenFlashlight extends AppCompatActivity {
private boolean brightnessOnOff;
private ImageButton screenFlashOnOffButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen_flashlight);
    screenFlashOnOffButton = (ImageButton) findViewById(R.id.screenFlashOnOffButton);
    brightnessOnOff = false;


}
public void screenFlashButtonClicked(View view) {
    try {
        if (brightnessOnOff) {

            turnBrightnessOff();
        } else{
                brightnessOnOff = true;
            turnBrightnessOn();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}



private void turnBrightnessOn() {
    try {
        screenFlashOnOffButton.setImageResource(R.drawable.screenonbutton);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 255);
        //Screen refresh to add brightness
        int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = (float) brightness / 255;
        getWindow().setAttributes(lp);


    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void turnBrightnessOff() {
    try {
        screenFlashOnOffButton.setImageResource(R.drawable.screenoffbutton);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 100);
        //Refresh screen
        int brightnesss = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
        WindowManager.LayoutParams lpp = getWindow().getAttributes();
        lpp.screenBrightness = (float) brightnesss/100;
        getWindow().setAttributes(lpp);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我用這個:

   public void onClick(View arg0) {
      int curBrightnessValue=android.provider.Settings.System.getInt(
      getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS);
      int SysBackLightValue = curBrightnessValue-25;
      android.provider.Settings.System.putInt(getContentResolver(),
      android.provider.Settings.System.SCREEN_BRIGHTNESS,
      SysBackLightValue);
}

不要忘記許可:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM