1

L'application dispose d'un bouton au milieu qui permute entre la luminosité, mais maintenant, si vous cliquez deux fois sur le bouton et que vous essayez de cliquer à nouveau, il ne fonctionne plus. Est-ce que quelqu'un sait comment mettre la luminosité de l'écran à l'état précédent avant que le bouton a été cliqué après que le bouton est cliqué la deuxième fois. Dans l'ensemble, l'application continue d'obtenir le journal des erreurs lorsque vous cliquez sur le bouton. Merci d'avance si quelqu'un peut comprendre cela! Voici le journal des erreurs:SecurityException pour l'autorisation WRITE_SETTINGS lors du réglage de la luminosité de l'écran

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) 

Voici le code de la classe:

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(); 
    } 
} 
+0

votre journal des erreurs est incomplet, sauf le type d'ion ne peut pas être vu ... –

+0

En outre, vous enfreignez de bonnes règles de programmation ici. L'action de XXX (dans ce cas turnBrignessOff/On) ne devrait rien avoir à faire avec le stockage dans les paramètres. Cela devrait être dans une méthode différente ou même une classe, qui sait comment faire cela. Vos fonctions enfreignent la règle de base «faites une chose et faites-le bien». (Ceci n'est pas pertinent de toute façon) –

+0

Ajout de l'exception et d'après cela, cela a quelque chose à voir avec les paramètres d'écriture, mais j'ai mis la permission dans le Manifeste Android. – Kenertj

Répondre

0

J'utilise ceci:

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); 
} 

Ne pas oublier la permission:

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