在主界面添加:xml布局
<!-- Network model -->
<header
android:id="@+id/network_settings"
android:title="@string/network_title"
android:fragment="com.android.settings.NetworkSettings"
android:icon="@drawable/ic_settings_more" />
java代码:
package com.android.settings;
import com.android.settings.bluetooth.DockEventReceiver;
import android.app.AlertDialog;
import android.app.Dialog;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.media.AudioManager;
import android.media.RingtoneManager;
import android.media.audiofx.AudioEffect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.os.SystemProperties;
import android.os.Vibrator;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.Preference.OnPreferenceChangeListener;
import android.provider.MediaStore;
import android.provider.Settings;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.preference.PreferenceFragment;
import java.util.List;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileInputStream;
public class NetworkSettings extends PreferenceFragment implements Preference.OnPreferenceClickListener,OnPreferenceChangeListener{
private static final String TAG = "NetworkSettings";
private static final String SMODE_CLASS_CHANGE = "s_mode_class_change";
private static final String KEY_MODEL_CHANGE = "key_model_change";
private static final String CIZILLTE_CLASS_CHANGE = "civilLTE_class_change";
private static String propertySw1 = null;
private static String propertySw2 = null;
private static String propertySrx = null;
private static String propertyPmp = null;
private CheckBoxPreference mSmodePreference = null;
private ListPreference mModelPreference = null;
private CheckBoxPreference mCivilltePreference = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.network_settings);
propertySw1 = SystemProperties.get("ro.sys.lte_radio_ant_sw1", "0");
propertySw2 = SystemProperties.get("ro.sys.lte_radio_ant_sw2", "0");
propertySrx = SystemProperties.get("ro.sys.srx_switch", "0");
propertyPmp = SystemProperties.get("ro.sys.pmp_sw_ctrl", "0");
mSmodePreference = (CheckBoxPreference)findPreference(SMODE_CLASS_CHANGE);
mModelPreference = (ListPreference)findPreference(KEY_MODEL_CHANGE);
mCivilltePreference = (CheckBoxPreference)findPreference(CIZILLTE_CLASS_CHANGE);
//mSmodePreference.setOnPreferenceClickListener(this);
//mSmodePreference.setOnPreferenceChangeListener(this);
mModelPreference.setOnPreferenceChangeListener(this);
//mCivilltePreference.setOnPreferenceClickListener(this);
}
/*@Override
public boolean onPreferenceClick(Preference preference) {
if(preference == mCivilltePreference){
setFile(propertyPmp, "0");
setFile(propertySrx, "1");
}
return true;
}*/
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.d(TAG, "onPreferenceChange");
if (preference == mModelPreference){
if(newValue.equals("001")){
mCivilltePreference.setEnabled(false);
mCivilltePreference.setChecked(false);
setFile(propertyPmp, "1");
setFile(propertySrx, "0");
setFile(propertySw1, "0");
setFile(propertySw2, "0");
}else if(newValue.equals("002")){
mCivilltePreference.setEnabled(true);
setFile(propertySw1, "0");
setFile(propertySw2, "1");
}else if(newValue.equals("003")){
mCivilltePreference.setEnabled(true);
setFile(propertySw1, "1");
setFile(propertySw2, "0");
}else if(newValue.equals("004")){
mCivilltePreference.setEnabled(true);
setFile(propertySw1, "1");
setFile(propertySw2, "1");
}
}
return true;
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference == mModelPreference) {
}else if (preference == mSmodePreference) {
boolean isChecked = mSmodePreference.isChecked();
if (isChecked) {
dialogExit();
} else {
}
}else if(preference == mCivilltePreference){
setFile(propertyPmp, "0");
setFile(propertySrx, "1");
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
private void dialogExit(){
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.biaoti);
builder.setMessage(R.string.comfirm_restart);
builder.setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton(R.string.quxiao, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
void setFile(String path, String val) {
FileOutputStream out = null;
try {
out = new FileOutputStream(path);
byte[] buf = val.getBytes();
out.write(buf, 0, buf.length);
} catch (FileNotFoundException e) {
Log.e(TAG, "FileNotFoundException: setFile " + e);
} catch (IOException e) {
Log.e(TAG, "IOException: setFile " + e);
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
}
}
}
String getFile(String path) {
FileInputStream is = null;
String val = null;
try {
is = new FileInputStream(path);
byte[] buffer = new byte[64];
int count = is.read(buffer);
if (count > 0) {
val = new String(buffer, 0, count);
}
} catch (IOException e) {
Log.d(TAG, "IOException: getFile " + e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
if (val != null) {
val = val.trim();
}
return val;
}
}
java代码中使用的布局:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/network_title"
android:key="sound_settings"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<PreferenceCategory
android:key="first_class"
android:title="@string/first_class_model"/>
<CheckBoxPreference
android:key="s_mode_class_change"
android:title="@string/s_mode"
android:summaryOn="@string/print_feature_state_on"
android:summaryOff="@string/print_feature_state_off"
/>
<PreferenceCategory
android:key="second_class"
android:title="@string/second_class_model"/>
<ListPreference
android:defaultValue="@string/model_default_value"
android:dialogTitle="@string/test_model_change"
android:entries="@array/ModelChange"
android:entryValues="@array/ModelChange_value"
android:key="key_model_change"
android:title="@string/test_model_change" >
</ListPreference>
<PreferenceCategory
android:key="third_class"
android:title="@string/third_class_model"/>
<CheckBoxPreference
android:key="civilLTE_class_change"
android:title="@string/civilLTE"
android:summaryOn="@string/print_feature_state_on"
android:summaryOff="@string/print_feature_state_off"
/>
</PreferenceScreen>
所引用到的array,string布局
<string-array name="ModelChange">
<item>@string/militaryLTE</item>
<item>@string/SZDJ</item>
<item>@string/ZZW</item>
<item>@string/ZHW</item>
</string-array>
<string-array name="ModelChange_value">
<item>001</item>
<item>002</item>
<item>003</item>
<item>004</item>
</string-array>
<string name="first_class_model">第一类模式</string>
<string name="second_class_model">第二类模式</string>
<string name="third_class_model">第三类模式</string>
<string name="militaryLTE">军用LTE</string>
<string name="SZDJ">SZDJ</string>
<string name="ZZW">ZZW</string>
<string name="ZHW">ZHW</string>
<string name="civilLTE">民用LTE</string>
<string name="model_default_value">001</string>
<string name="test_model_change">模式切换</string>
<string name="comfirm_restart">是否要重新启动?</string>
<string name="biaoti">提示</string>
<string name="sure">确定</string>
<string name="quxiao">取消</string>