Android一体型開発のシステム設定変更 --- 画面の明るさ
Android オールインワン マシン開発のためのシステム設定の変更 --- 自動画面ロック
序文
最近、私は仕事で少し怠けていたので、時間をかけて要約しました。最近、医療チャネルに適したオールインワン アプリの開発に取り組んでいます。
オールインワン機は工場に行ってボードとシステムをカスタマイズし、それらを探した後、アプリはfwの後にapkの形でシステムにパッケージ化されます.もちろん、ブートロゴもパッケージ化されます.
このバージョンのオールインワン機には、システム設定を変更できる機能セクションがあります.以前にAndroid通話システム設定をまとめた覚えがあります.興味がある場合は、この記事をご覧ください.いくつかの機能を説明します细分化
。
ただし、システム設定を呼び出すと、ユーザーが携帯電話と同じ機能を見ることができるシステム機能もあれば、必要のない機能もあります.ここでは、システム権限を自分で変更する機能を実装する必要があります.
次に、オールインワン マシン開発のためのシステム設定の変更に関する一連の記事を公開します. 一緒に学び、進歩することを歓迎します!
画面の明るさ
システムを変更する操作は屏幕亮度
ごく一般的であり、多媒体
一般的に開発にある程度関与します。
上の写真からは効果表示がわかりにくいですが、関数の具体的な実装、つまり seekBar を介して輝度のパーセンテージを制御することはおそらく推測できます。
画面の明るさを変更する機能を実装する場合は、ここで高级
プライバシーの許可が必要であり、ユーザーはアプリの設定ページにいる必要があります手动授权
。
デザインのアイデア
-
AndroidManifest 設定権限。
-
システム画面の明るさを取得します。
-
システム設定で画面の明るさを変更 (画面の明るさの変化を監視するために登録)、すべてのページとアプリに影響します。
3.1 判断権限
3.2 必要に応じて画面の明るさを変更する
3.3 権限がない場合はユーザーを承認するようにガイドする
実装
AndroidManifest 設定権限
<!-- 修改系统设置 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.HARDWARE_TEST" />
システム画面の明るさを取得する
- ジャワ
/**
* 获取app屏幕亮度
*
* @param activity
* @return
*/
public static int getScreenBrightness(Activity activity) {
try {
return Settings.System.getInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
return 0;
}
- コトリン
/**
* 获取系统屏幕亮度(0-255)
*/
private fun getScreenBrightness(): Int {
try {
return Settings.System.getInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS)
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
return 0
}
システム設定で画面の明るさを変更し、すべてのページとアプリに影響を与えます
監視システムの画面の明るさの変化を登録する
- ジャワ
private void registerContentObserver() {
ContentResolver contentResolver = getContentResolver();
if (contentResolver != null) {
contentResolver.registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
true,
mBrightnessObserver);
}
}
- コトリン
private fun registerContentObserver() {
this.contentResolver?.registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
true,
mBrightnessObserver
)
}
システムの明るさの変化を監視する
- ジャワ
private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {
public void onChange(boolean selfChange) {
super.onChange(selfChange);
ContentResolver contentResolver = getContentResolver();
if (contentResolver != null) {
mScreenBrightness = getScreenBrightness(BrightActivity.this);
Log.e("监听亮度 >>>", "init: " + mScreenBrightness);
updateNum(mScreenBrightness);
setWindowBrightness(mScreenBrightness);
}
}
};
- コトリン
private val mBrightnessObserver = object : ContentObserver(Handler(Looper.getMainLooper())) {
override fun onChange(selfChange: Boolean) {
super.onChange(selfChange)
try {
this.contentResolver?.let {
mScreenBrightness = Settings.System.getInt(it, Settings.System.SCREEN_BRIGHTNESS)
updateNum(mScreenBrightness)
setWindowBrightness(mScreenBrightness)
}
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
}
}
ログアウトリスナー
- ジャワ
void onDestroy() {
super.onDestroy();
ContentResolver contentResolver = getContentResolver();
if (contentResolver != null) {
contentResolver.unregisterContentObserver((ContentObserver) mBrightnessObserver);
}
}
protected
- コトリン
override fun onDestroy() {
super.onDestroy()
//注销监听
this.contentResolver?.unregisterContentObserver(mBrightnessObserver)
}
seekBar を介してシステム設定で画面の明るさを変更します
- ジャワ
brightBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
(api = Build.VERSION_CODES.M)
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.e("动态屏幕亮度 >>>", "onProgressChanged: " + progress);
mScreenBrightness = progress * ratio;
if (Settings.System.canWrite(BrightActivity.this)) {
setScreenBrightness(mScreenBrightness);
updateNum(mScreenBrightness);
} else {
Toast.makeText(BrightActivity.this, "没有修改权限", Toast.LENGTH_SHORT).show();
// 打开允许修改Setting 权限的界面
Intent intent = new Intent(
Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri
.parse("package:"
+ getPackageName()));
startActivityForResult(intent,
mRequestCode);
}
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
- コトリン
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
Log.i("onProgressChanged----", "" + progress)
mScreenBrightness = progress * ratio
//判断是否有修改系统设置权限
if (Settings.System.canWrite(this)) {
setScreenBrightness(mScreenBrightness)
updateNum(mScreenBrightness)
} else {
Toast.makeText(this, "没有修改权限", Toast.LENGTH_SHORT).show()
// 打开允许修改系统设置权限的页面
val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:$packageName"))
startActivityForResult(intent, mRequestCode)
}
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
})
ユーザー認証済み、画面の明るさを設定
- ジャワ
/**
* 设置系统屏幕亮度,影响所有页面和app
* 注意:这种方式是需要手动权限的(android.permission.WRITE_SETTINGS)
*/
private final void setScreenBrightness(int brightness) {
//先检测调节模式
setScreenManualMode();
//再设置
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);
}
private final void setScreenManualMode() {
try {
//获取当前系统亮度调节模式
int mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
//如果是自动,则改为手动
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
Settings.System.putInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
} catch (Settings.SettingNotFoundException var2) {
var2.printStackTrace();
}
}
- コトリン
/**
* 设置系统屏幕亮度,影响所有页面和app
* 注意:这种方式是需要手动权限的(android.permission.WRITE_SETTINGS)
*/
private fun setScreenBrightness(brightness: Int) {
try {
//先检测调节模式
setScreenManualMode()
//再设置
Settings.System.putInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS, brightness)
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
}
/**
* 设置系统亮度调节模式(SCREEN_BRIGHTNESS_MODE)
* SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节
*/
private fun setScreenManualMode() {
try {
//获取当前系统亮度调节模式
val mode = Settings.System.getInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE)
//如果是自动,则改为手动
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
Settings.System.putInt(
this.contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
)
}
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
}
モニターシステムボタン
//监听系统按键
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (mScreenBrightness > ratio) {
mScreenBrightness -= ratio;
} else {
mScreenBrightness = 1;
}
Log.e("Down >>>", "onKeyDown: " + mScreenBrightness);
setWindowBrightness(mScreenBrightness);
updateNum(mScreenBrightness);
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
if (mScreenBrightness < (255 - ratio)) {
mScreenBrightness += ratio;
} else {
mScreenBrightness = 255;
}
Log.e("Up >>>", "onKeyDown: " + mScreenBrightness);
setWindowBrightness(mScreenBrightness);
updateNum(mScreenBrightness);
return true;
/* case KeyEvent.KEYCODE_VOLUME_MUTE:
return true;*/
}
return super.onKeyDown(keyCode, event);
}
完全な操作
- ジャワ
/**
* @author 拉莫帅
* @date 2023/2/8
* @address
* @Desc 修改系统亮度
*/
public class BrightActivity extends Activity {
/**
* 非系统签名应用,引导用户手动授权修改Settings 权限
**/
private int mRequestCode = 1;
private SeekBar brightBar;
//当前屏幕亮度
private int mScreenBrightness = 0;
//每次加减的比例
private int ratio = 25;
private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {
public void onChange(boolean selfChange) {
super.onChange(selfChange);
ContentResolver contentResolver = getContentResolver();
if (contentResolver != null) {
mScreenBrightness = getScreenBrightness(BrightActivity.this);
Log.e("监听亮度 >>>", "init: " + mScreenBrightness);
updateNum(mScreenBrightness);
setWindowBrightness(mScreenBrightness);
}
}
};
(api = Build.VERSION_CODES.M)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bright);
init();
registerContentObserver();
setListener();
}
private void init() {
brightBar = findViewById(R.id.brightBar);
ImageView back = findViewById(R.id.back);
TextView title = findViewById(R.id.title);
title.setText("亮度");
//获取当前亮度
mScreenBrightness = getScreenBrightness(BrightActivity.this);
Log.e("当前亮度 >>>", "init: " + mScreenBrightness);
updateNum(mScreenBrightness);
back.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
private void registerContentObserver() {
ContentResolver contentResolver = getContentResolver();
if (contentResolver != null) {
contentResolver.registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
true,
mBrightnessObserver);
}
}
protected void onDestroy() {
super.onDestroy();
ContentResolver contentResolver = getContentResolver();
if (contentResolver != null) {
contentResolver.unregisterContentObserver((ContentObserver) mBrightnessObserver);
}
}
private void setListener() {
brightBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
(api = Build.VERSION_CODES.M)
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.e("动态屏幕亮度 >>>", "onProgressChanged: " + progress);
mScreenBrightness = progress * ratio;
if (Settings.System.canWrite(BrightActivity.this)) {
setScreenBrightness(mScreenBrightness);
updateNum(mScreenBrightness);
} else {
Toast.makeText(BrightActivity.this, "没有修改权限", Toast.LENGTH_SHORT).show();
// 打开允许修改Setting 权限的界面
Intent intent = new Intent(
Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri
.parse("package:"
+ getPackageName()));
startActivityForResult(intent,
mRequestCode);
}
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
(api = Build.VERSION_CODES.M)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == mRequestCode) {
if (Settings.System.canWrite((Context) BrightActivity.this)) {
setScreenBrightness(mScreenBrightness);
updateNum(mScreenBrightness);
} else {
Toast.makeText((Context) this, "您已拒绝修系统Setting的屏幕亮度权限", Toast.LENGTH_SHORT).show();
}
}
}
/**
* 获取app屏幕亮度
*
* @param activity
* @return
*/
public static int getScreenBrightness(Activity activity) {
try {
return Settings.System.getInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
return 0;
}
/**
* 更新页面显示
*
* @param mScreenBrightness
*/
private final void updateNum(int mScreenBrightness) {
//四舍五入
int i = (int) Math.floor(mScreenBrightness / ratio);
brightBar.setProgress(i);
}
/**
* 设置系统屏幕亮度,影响所有页面和app
* 注意:这种方式是需要手动权限的(android.permission.WRITE_SETTINGS)
*/
private final void setScreenBrightness(int brightness) {
//先检测调节模式
setScreenManualMode();
//再设置
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);
}
private final void setScreenManualMode() {
try {
//获取当前系统亮度调节模式
int mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
//如果是自动,则改为手动
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
Settings.System.putInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
} catch (Settings.SettingNotFoundException var2) {
var2.printStackTrace();
}
}
/**
* 设置当前应用屏幕亮度,只当前有效
*/
private final void setWindowBrightness(int brightness) {
Window window = this.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = (float) brightness / 255.0F;
window.setAttributes(lp);
}
//监听系统按键
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (mScreenBrightness > ratio) {
mScreenBrightness -= ratio;
} else {
mScreenBrightness = 1;
}
Log.e("Down >>>", "onKeyDown: " + mScreenBrightness);
setWindowBrightness(mScreenBrightness);
updateNum(mScreenBrightness);
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
if (mScreenBrightness < (255 - ratio)) {
mScreenBrightness += ratio;
} else {
mScreenBrightness = 255;
}
Log.e("Up >>>", "onKeyDown: " + mScreenBrightness);
setWindowBrightness(mScreenBrightness);
updateNum(mScreenBrightness);
return true;
/* case KeyEvent.KEYCODE_VOLUME_MUTE:
return true;*/
}
return super.onKeyDown(keyCode, event);
}
}
- コトリン
class BrightnessActivity : AppCompatActivity() {
//当前屏幕亮度
private var mScreenBrightness: Int = 0
//每次加减的比例
private var ratio: Int = 25
private var mRequestCode = 1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_brightness)
init()
registerContentObserver()
setListener()
}
private fun init() {
mScreenBrightness = getScreenBrightness()
updateNum(mScreenBrightness)
}
/**
* 注册监听 系统屏幕亮度变化
*/
private fun registerContentObserver() {
this.contentResolver?.registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
true,
mBrightnessObserver
)
}
/**
* 监听系统亮度变化
*/
private val mBrightnessObserver = object : ContentObserver(Handler(Looper.getMainLooper())) {
override fun onChange(selfChange: Boolean) {
super.onChange(selfChange)
try {
this.contentResolver?.let {
mScreenBrightness = Settings.System.getInt(it, Settings.System.SCREEN_BRIGHTNESS)
updateNum(mScreenBrightness)
setWindowBrightness(mScreenBrightness)
}
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
}
}
override fun onDestroy() {
super.onDestroy()
//注销监听
this.contentResolver?.unregisterContentObserver(mBrightnessObserver)
}
private fun setListener() {
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
Log.i("onProgressChanged----", "" + progress)
mScreenBrightness = progress * ratio
//判断是否有修改系统设置权限
if (Settings.System.canWrite(this)) {
setScreenBrightness(mScreenBrightness)
updateNum(mScreenBrightness)
} else {
Toast.makeText(this, "没有修改权限", Toast.LENGTH_SHORT).show()
// 打开允许修改系统设置权限的页面
val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:$packageName"))
startActivityForResult(intent, mRequestCode)
}
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
})
}
/**
* 处理返回结果
*/
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == mRequestCode) {
if (Settings.System.canWrite(this)) {
setScreenBrightness(mScreenBrightness)
updateNum(mScreenBrightness)
} else {
Toast.makeText(this, "拒绝了权限", Toast.LENGTH_SHORT).show()
}
}
}
/**
* 更新页面显示
*/
private fun updateNum(mScreenBrightness: Int) {
//转float 取四舍五入
val i: Int = (mScreenBrightness / (ratio.toFloat())).roundToInt()
tv_brightness.text = i.toString()
seekBar.progress = i
}
/**
* 获取系统屏幕亮度(0-255)
*/
private fun getScreenBrightness(): Int {
try {
return Settings.System.getInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS)
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
return 0
}
/**
* 设置系统屏幕亮度,影响所有页面和app
* 注意:这种方式是需要手动权限的(android.permission.WRITE_SETTINGS)
*/
private fun setScreenBrightness(brightness: Int) {
try {
//先检测调节模式
setScreenManualMode()
//再设置
Settings.System.putInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS, brightness)
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
}
/**
* 设置系统亮度调节模式(SCREEN_BRIGHTNESS_MODE)
* SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节
*/
private fun setScreenManualMode() {
try {
//获取当前系统亮度调节模式
val mode = Settings.System.getInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE)
//如果是自动,则改为手动
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
Settings.System.putInt(
this.contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
)
}
} catch (e: SettingNotFoundException) {
e.printStackTrace()
}
}
/**
* 设置当前应用屏幕亮度,只当前有效
*/
private fun setWindowBrightness(brightness: Int) {
val window = window
val lp = window.attributes
lp.screenBrightness = brightness / 255.0f
window.attributes = lp
}
}
最近、忙しいスケジュールから一息ついて、 ↓↓↓↓【Who's De Code Farmer Chenさん】↓↓↓↓、技術系のブログ記事やエネルギッシュな情報コンテンツを定期的に発信していきます!すべての上司を歓迎し、フォローしてください。あなたは私のモチベーションの源です!