рдПрдХ рдЕрдЪреНрдЫрд╛ рдЪрдордХ рд╕рдорд╛рдпреЛрдЬрди рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛

рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ, рдореЗрд░реА рдорд╛рдБ рдХреЗ рдкрд╛рд╕ рдлреЛрди рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЕрдкрдиреА рдмрд╛рдПрдВ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рд╕реНрд╡рд╛рдЗрдк рдХрд░рдХреЗ рд╕реНрдХреНрд░реАрди рдХреА рдЪрдордХ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдереАред рдорд╛рдБ рдХреЛ рдЙрд╕рдХреА рдЖрджрдд рд╣реЛ рдЧрдИ, рдФрд░ рдлрд┐рд░ рдПрдХ рдирдП рдлреЛрди рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рдФрд░ рд╡рд╣рд╛рдБ рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЛрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдирд╛рд▓реЙрдЧреНрд╕ рдирд╣реАрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рдкрд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдЙрд╕рдХреЗ рдЬрдиреНрдорджрд┐рди рдХреЗ рд▓рд┐рдП рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдПрдХ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЧрд╛рдЗрдб рдмрдирд╛рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣реИред

рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ (рд╕реАрдзреЗ рдЪрдордХ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ) рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдУрд╡рд░рд▓реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ред рдПрдВрдбреНрд░реЙрдЗрдб 6.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдЗрди рджреЛрдиреЛрдВ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рдХрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧреА - рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдмрдЯрди рд╣реЛрдВрдЧреЗ - рдПрдХ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдЬреЛ рдЪрдордХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдХрдмрд╛рд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред рдЖрдЗрдП рд╣рдорд╛рд░реА рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдорд╛рд░реНрдХрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ:
рдорд╛рд░реНрдХрдЕрдк рдореБрдЦреНрдпрддрд╛
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/startService" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="27dp" android:text=" " /> <Button android:id="@+id/stopService" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/startService" android:layout_below="@+id/startService" android:layout_marginTop="39dp" android:text=" " /> </LinearLayout> 


рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
MainActivity
 import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //  ,   Android  ,    6   -     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES .M) { if (!Settings.System.canWrite(getApplicationContext())) { Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName())); Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivity(myIntent); startActivity(intent); } else { } } final Button startService = (Button) findViewById(R.id.startService); final Button stopService = (Button) findViewById(R.id.stopService); startService.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startService(new Intent(getApplication(), BrightnessChekingService.class)); } }); stopService.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopService(new Intent(getApplication(), BrightnessChekingService.class)); } }); } } 


рдЕрдм рд╣рдо BrightnessChekingService рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдХрд╛рд░реНрдп рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдмрддрд╛рдП рд╣реИрдВред рдордд рднреВрд▓реЛ - рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
BrightnessChekingService
 import android.app.Service; import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; import android.os.Build; import android.os.IBinder; import android.provider.Settings; import android.view.Gravity; import android.view.WindowManager; import android.widget.SeekBar; public class BrightnessChekingService extends Service{ private WindowManager windowManager; private WindowManager.LayoutParams params; private VerticalSeekBar seekBar; private Context context; public void onCreate () { super.onCreate(); //    ,     Android,          int LAYOUT_FLAG; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE; } windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); context = this.getApplicationContext(); seekBar = new VerticalSeekBar(context); seekBar.setMax(255); float alpha = (float) 0.1; seekBar.setAlpha(alpha); params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.MATCH_PARENT, LAYOUT_FLAG, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.START; params.x = 0; params.y = 0; params.height = 700; windowManager.addView(seekBar, params); int Brightnes = Settings.System.getInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0); seekBar.setProgress(Brightnes); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){ public void onProgressChanged(SeekBar seekBar, int i, boolean b) { Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,i); //    ,      seekBar   Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch (SeekBar seekBar) { } }); } public void onDestroy() { super.onDestroy(); if (seekBar != null) windowManager.removeView(seekBar); } @Override public IBinder onBind(Intent intent) { return null; } } 


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╡рд░реНрдЯрд┐рдХрд▓ рд╕реАрдХрд░рдмрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд░реЗрдЧреБрд▓рд░ рд╕реАрдХрд░ рдХрд╛ рдХрд╕реНрдЯрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛, рдЕрдВрддрд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реАрдХрдмреЗрд░ рд▓рдВрдмрд╡рдд рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛
VerticalSeekBar
 import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.SeekBar; public class VerticalSeekBar extends SeekBar { public VerticalSeekBar (Context context) { super(context); } public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public VerticalSeekBar(Context context, AttributeSet attrs) { super(context, attrs); } protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(h, w, oldh, oldw); } public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); } protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(heightMeasureSpec, widthMeasureSpec); setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); } protected void onDraw(Canvas c) { c.rotate(-90); c.translate(-getHeight(), 0); super.onDraw(c); } @Override public boolean onTouchEvent(MotionEvent event) { if (!isEnabled()) { return false; } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_UP: setProgress(getMax() - (int) (getMax() * event.getY() / getHeight())); onSizeChanged(getWidth(), getHeight(), 0, 0); break; case MotionEvent.ACTION_CANCEL: break; } return true; } } 


рдпрд╣рд╛рдБ рдЖрд╡реЗрджрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
рдкреНрд░рдХрдЯ
 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.bright"> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".BrightnessChekingService" android:enabled="true" android:exported="true"></service> </application> </manifest> 


рдпрд╣ рд╕рдм рдПрдХ рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдорд╛рдБ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рдПрдХ рдЖрддреНрдорд╛ рдХреЗ рдЬрдиреНрдорджрд┐рди рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рд╣реИред рд╣рдореЗрдВ рдРрд╕реА рдмрд╛рдд рдорд┐рд▓реА:


рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдореЛрдб рдореЗрдВ рдкрдЯреНрдЯреА рд▓рдЧрднрдЧ рдЕрджреГрд╢реНрдп рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдмрдЯрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрдЯреНрдЯреА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╡рд┐рдирд┐рдпрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдХреНрд░реАрди рдкрд░ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ред

рдпрд╣рд╛рдВ рдЖрдк рдЕрдкрдХреНрд╖рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рддреЛ рдореИрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕рд╛рддрд╡реЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдерд╛ред рдФрд░ рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рдЕрдкрдиреА рдЧрд╣рд░реА рдХреГрддрдЬреНрдЮрддрд╛ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡реЗрджрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЖрдк рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдореЗрд░реА рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi412967/


All Articles