Android Settings.System的使用
来源:互联网 发布:ios6不越狱安装软件 编辑:程序博客网 时间:2024/04/27 21:28
在Android中,如果你要打开或关闭数据连接,WiFi,飞行模式,蓝牙,你需要对数据库中这些开关的值进行修改,这时,你会使用到Settings.System,在settings数据库中这些属性值以键值对的形式存储,通过其get和put方法可进行这些系统属性的修改。
我们从如何添加一个属性开始,慢慢了解其使用方法。本例添加一个控制数据连接的属性:def_data_connection 。
1、定义属于该属性的字段,可定义为integer,string,boolean等,这里设置为boolean型,并赋值为true。
\frameworks\base\packages\SettingsProvider\res\values\defaults.xml
<bool name="def_data_connection">true</bool>
2、在settings中定义该属性名称:
\frameworks\base\core\java\android\provider\Settings.java
public static final String DATA_CONNECTION = "data_connection";在这个Settings.java里面同时写了获取Settings.System属性值的方法,
如putInt():
public static boolean putInt(ContentResolver cr, String name, int value) { return putIntForUser(cr, name, value, UserHandle.myUserId()); } /** @hide */ public static boolean putIntForUser(ContentResolver cr, String name, int value, int userHandle) { if (LOCATION_MODE.equals(name)) { // HACK ALERT: temporary hack to work around b/10491283. // TODO: once b/10491283 fixed, remove this hack return setLocationModeForUser(cr, value, userHandle); } return putStringForUser(cr, name, Integer.toString(value), userHandle); }
getInt():
public static int getInt(ContentResolver cr, String name) throws SettingNotFoundException { return getIntForUser(cr, name, UserHandle.myUserId()); } /** @hide */ public static int getIntForUser(ContentResolver cr, String name, int userHandle) throws SettingNotFoundException { if (LOCATION_MODE.equals(name)) { // HACK ALERT: temporary hack to work around b/10491283. // TODO: once b/10491283 fixed, remove this hack return getLocationModeForUser(cr, userHandle); } String v = getStringForUser(cr, name, userHandle); try { return Integer.parseInt(v); } catch (NumberFormatException e) { throw new SettingNotFoundException(name); } }
当然还有getString,putString,getLong,putLong等等,不在一一列出。
3、把该值插入到数据库中:
\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
在loadSystemSettings方法中插入到数据库并赋予处置。
private void loadSystemSettings(SQLiteDatabase db) { SQLiteStatement stmt = null; try { stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" + " VALUES(?,?);"); ........ loadBooleanSetting(stmt, Settings.System.DATA_CONNECTION,R.bool.def_data_connection);//data connection ......... } finally { if (stmt != null) stmt.close(); }}
其中loadBooleanSetting是赋值的方法:
private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) { loadSetting(stmt, key, mContext.getResources().getBoolean(resid) ? "1" : "0"); }
private void loadSetting(SQLiteStatement stmt, String key, Object value) { stmt.bindString(1, key); stmt.bindString(2, value.toString()); stmt.execute(); }此时第1步定义的def_data_connection被赋给了Settings.System.DATA_CONNECTION。
4、使用Settings.System.DATA_CONNECTION
此时我们工作已经基本结束了,接下来可以调用该属性进行操作了。
取值:
boolean enable = Settings.System.getInt(getContentResolver(),Settings.System.DATA_CONNECTION, 1)==1;
赋值:
Settings.System.putInt(context.getContentResolver(),Settings.System.DATA_CONNECTION, 0);
0 0
- Android Settings.System的使用
- Android中Settings.System的使用
- Android中Settings.System的使用
- Android中Settings.System的使用
- Settings.System的使用
- Android中Settings.System的使用(系统全局变量)
- Android中Settings.System的使用(系统全局变量)
- android Settings.Secure的使用
- Android SystemProperties和Settings.System
- 在Android M及更高版本中使用 Settings.System 抛出异常"You cannot keep your settings in the secure settings. "
- 在Android M及更高版本中使用 Settings.System 抛出异常"You cannot keep your settings in the secure settings. "
- 在Android M及更高版本中使用 Settings.System 抛出异常"You cannot keep your settings in the secure settings. "
- 在Android M及更高版本中使用 Settings.System 抛出异常"You cannot keep your settings in the secure settings. "
- 在Android M及更高版本中使用 Settings.System 抛出异常"You cannot keep your settings in the secure settings. "
- 在Android M及更高版本中使用 Settings.System 抛出异常"You cannot keep your settings in the secure settings. "
- Android 应用程序分析之Settings.System.putInt
- Android SystemProperties和Settings.System介绍
- Android SystemProperties和Settings.System介绍
- Android Studio 打包apk,自动追加版本号和版本名称
- C#使用SharpZipLib解压Zip单个文件到内存
- UIWebView与JavaScript(JS) 回调交互(oc与js交互)
- 基础三
- 如何搭建千万级别用户的应用系统
- Android Settings.System的使用
- BestCoder Round #68 (div.1)
- Android apk 加固
- thinkphp更新update操作
- Codeforces #340 div2 ABCDE
- 自定义PopupWindow实现下拉菜单选项效果
- Android 知识点总结
- 如何查看真机的沙盒(图文教程)
- Face Alignment at 3000FPS(C++版)工程配置(非Cmake)