Android getContentResolver() 设置手机屏幕休眠时间

本文介绍了一个简单的Android应用,该应用允许用户通过对话框选择不同的屏幕休眠时间。使用SharedPreferences来保存用户的最后选择,并利用AlertDialog实现交互界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.screenofftime.MainActivity"
    android:gravity="center_horizontal" >

    <Button 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选择屏幕休眠时间"
        android:onClick="chooseTime"/>

</LinearLayout>

MainActivity:

package com.example.screenofftime;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.content.DialogInterface.OnClickListener;

public class MainActivity extends Activity {
    private SharedPreferences sp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sp = getSharedPreferences("lastChoice",Activity.MODE_PRIVATE);
    }

    public void chooseTime(View v){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setTitle("选择背光时间");
        final String[] onScreenTime =new String[] {"15秒","30秒","1分钟","2分钟","5分钟","10分钟"};
            int lastChoice = sp.getInt("time", -1);//获取SharedPreferences中保存的上次选择,没有则默认为-1
            /**
             * 第二个参数表示默认选中的item的下标 -1代表没有默认的选项,设置为上次默认选中项
             * 
             */
            alertDialog.setSingleChoiceItems(onScreenTime, lastChoice, new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    switch (which) {
                    case 0:
                        setScreenOffTime(15000);
                        saveLastChoice(which);
                        break;
                    case 1:
                        setScreenOffTime(30000);
                        saveLastChoice(which);
                        break;
                    case 2:
                        setScreenOffTime(60000);
                        saveLastChoice(which);
                        break;
                    case 3:
                        setScreenOffTime(120000);
                        saveLastChoice(which);
                        break;
                    case 4:
                        setScreenOffTime(300000);
                        saveLastChoice(which);
                        break;
                    case 5:
                        setScreenOffTime(600000);
                        saveLastChoice(which);
                        break;

                    default:
                        break;
                    }
                }
            });

            alertDialog.setNegativeButton("取消", new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            alertDialog.setPositiveButton("确定", new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
        });
            alertDialog.create().show();

    }
    /***
     * 设置背光时间
     * @param paramInt
     */
    private void setScreenOffTime(int paramInt) {
        try {
            Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT,paramInt);
        } catch (Exception localException) {
            localException.printStackTrace();

        }
    }
    /***
     * 将上次选择保存到SharedPreferences中,下次打开时默认选中上次所选项
     * @param which
     */
    private void saveLastChoice(int which){
        Editor edit = sp.edit();
        edit.putInt("time", which);
        edit.commit();
    }


}

这里写图片描述

<think>好的,用户想知道如何在Android应用中自定义APK的休眠时间设置。首先,我需要明确“休眠时间”通常指的是屏幕超时时间,也就是用户不操作设备后屏幕自动关闭的时间Android系统本身允许用户在系统设置中调整这个时间,但用户可能希望在自己的应用里直接控制这个设置,或者为应用内的特定界面设置不同的超时时间。 接下来,我需要考虑Android的权限问题。修改系统设置需要特定的权限,比如WRITE_SETTINGS,这在较新的Android版本中可能属于高危权限,需要动态申请或者在清单文件中声明。此外,不同版本的Android对权限的处理方式不同,可能需要处理兼容性问题。 然后,我应该想到使用Settings.System类来访问和修改系统设置。例如,屏幕超时时间对应的键是SCREEN_OFF_TIMEOUT,其值以毫秒为单位。开发者可以通过ContentResolver来修改这个值,但必须确保应用有相应的权限。 另外,用户可能希望他们的应用在特定Activity中保持屏幕常亮,这时候可以使用WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON。这种方法不需要权限,但只在当前Activity处于前台时有效,适合临时性的需求。 还需要考虑用户提到的自定义休眠时间是否需要在应用退出后恢复原设置,或者在应用的不同界面有不同的设置。如果是前者,可能需要监听应用的生命周期,在onPause或onDestroy时恢复原来的超时时间。如果是后者,需要在每个Activity的onResume中设置不同的超时。 此外,用户提供的引用中提到了修改默认值的方法,比如在SettingsProvider中修改defaults.xml,但这通常需要系统级权限或修改系统镜像,普通应用无法做到。因此,可能用户的问题更偏向于应用层如何动态调整,而不是修改系统默认值。 最后,需要确保回答结构清晰,分步骤说明不同的方法,并指出需要的权限和适用场景。同时,生成的相关问题应围绕权限处理、不同实现方式的优缺点、保持屏幕常亮的方法等展开,帮助用户进一步了解相关知识。</think>### 如何在Android应用中自定义APK的休眠时间设置Android中,"休眠时间"通常指屏幕超时时间(Screen Timeout)。自定义该设置可通过以下方法实现: --- #### **方法一:通过系统设置修改(需权限)** 1. **添加权限** 在`AndroidManifest.xml`中声明权限: ```xml <uses-permission android:name="android.permission.WRITE_SETTINGS" /> ``` 注意:Android 6.0+需动态申请权限[^4]。 2. **修改屏幕超时时间** 使用`Settings.System`类通过`ContentResolver`修改系统值: ```java int timeoutMillis = 300000; // 5分钟(单位:毫秒) Settings.System.putInt( getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, timeoutMillis ); ``` --- #### **方法二:通过窗口标志保持屏幕常亮(无需权限)** 在需要保持屏幕常亮的Activity中设置窗口标志: ```java getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); ``` 此方法仅在Activity生命周期内有效[^3]。 --- #### **方法三:自定义系统默认值(需系统级权限)** 修改系统配置文件`defaults.xml`(仅适用于系统应用或定制ROM): ```xml <integer name="def_screen_off_timeout">300000</integer> ``` 此方法需要访问`frameworks/base/packages/SettingsProvider`的源码[^1]。 --- #### **注意事项** 1. **权限限制** `WRITE_SETTINGS`权限在Android 6.0+需动态申请,且需用户手动授权。 2. **兼容性处理** 不同厂商可能限制修改系统设置,需测试目标设备。 3. **恢复默认值** 建议在应用退出时恢复原始设置: ```java int originalTimeout = Settings.System.getInt( getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT ); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值