android 5.1 中添加显示运营商的控制
2015-09-30 13:52
399 查看
现在根据项目需求,要在设置中添加switch来控制是否显示运营商。我的过程如下所示:
首先在设置的显示中添加控制:
packages/apps/Settings./res/xml/display_settings.xml
当设置中切换状态时,保存当前的状态到sharepreferences中。并发送广播给Systemui去进行更新。
接下来就是再SystemUI中进行处理
/home/blandon/android/trunk/frameworks/base/packages/SystemUI/res/layout/status_bar.xml
<com.android.keyguard.AlphaOptimizedLinearLayout
android:id="@+id/notification_icon_area_inner"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- add by zhouming for carrier show or hide -->
<TextView
android:id="@+id/carrier_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/device_info_not_available"
/>
这里得注意,5.1中的Systemui的布局中,如果添加在com.android.systemui.statusbar.AlphaOptimizedFrameLayout外面,会随着锁屏界面的打开而消失,具体就是再PhoneStatusBar中控制,这里不多说。
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
该广播用来接受从设置端传来的控制参数
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean show=intent.getBooleanExtra("show_or_hide", false);
if(show) {
mCarrierText.setVisibility(View.VISIBLE);
mCarrierText.setText(carrier_text);
SharedPreferences sharedPreferences = context.getSharedPreferences("carrierShow", context.MODE_WORLD_WRITEABLE);
Editor editor = sharedPreferences.edit();
editor.putInt("show", 1);
editor.commit();
}else{
// mCarrierText.setText(carrier_text);
mCarrierText.setVisibility(View.GONE);
SharedPreferences sharedPreferences = context.getSharedPreferences("carrierShow", context.MODE_WORLD_WRITEABLE);
Editor editor = sharedPreferences.edit();
editor.putInt("show", 0);
editor.commit();
}
}
}同时得注册对ServiceState改变的监听
系统中的ServiceState改变会发送ACTION_SERVICE_STATE_CHANGED的广播,并且该广播是Stiky广播,所以当我们注册时便能收到改变。
MyPhoneStateReceiver myreceiver = new MyPhoneStateReceiver();
IntentFilter mintentFilter = new IntentFilter(ACTION_SERVICE_STATE_CHANGED);
context.registerReceiver(myreceiver, mintentFilter);
private class MyPhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_SERVICE_STATE_CHANGED)) {
Log.d(TAG, "Intent Action: ACTION_SERVICE_STATE_CHANGED");
ServiceState mServiceState = ServiceState.newFromBundle(intent.getExtras());
//switch (mServiceState.getState()) {
switch(intent.getExtras().getInt("state")){
case 0:
// mStringSer = "IN_SERVICE ";
break;
case 1:
// mStringSer = "OUT_OF_SERVICE";
break;
case 2:
// mStringSer = "EMERGENCY_ONLY";
break;
case 3:
// mStringSer = "POWER_OFF";
break;
default:
// mStringSer = "UNKNOWN";
break;
}
carrier_text=mServiceState.getOperatorAlphaLong();
if(carrier_text==null) {
carrier_text="No Service";
}
SharedPreferences sharedPreferences = context.getSharedPreferences("carrierShow", context.MODE_WORLD_WRITEABLE);
int showOrHide = sharedPreferences.getInt("show", 0);
if(showOrHide==1) {
mCarrierText.setText(carrier_text);
}
}
}
}
以上就是大致过程,小细节就没细述了,假日愉快。
首先在设置的显示中添加控制:
packages/apps/Settings./res/xml/display_settings.xml
<SwitchPreference android:key="carrier_show_hide" android:title="@string/carrier_show_hide" android:persistent="false" />/packages/apps/Settings/src/com/android/settings/DisplaySettings.java
private static final String KEY_CARRIER="carrier_show_hide";
public void onCreate(Bundle savedInstanceState) { mCarrierShowPreference = (SwitchPreference) findPreference(KEY_CARRIER); mCarrierShowPreference.setOnPreferenceChangeListener(this); }
<span style="font-size:18px;color:#3333FF;"> <span style="font-size:18px;">进入设置时初始化当前的设置状态。</span></span> if(mCarrierShowPreference != null) { SharedPreferences sharedPreferences = getActivity().getSharedPreferences("carrierShow_setting",getActivity().MODE_WORLD_WRITEABLE); int show=sharedPreferences.getInt("show",0); if(show==1) { boolean show_or_hide=true; mCarrierShowPreference.setChecked(show_or_hide); Editor editor = sharedPreferences.edit(); editor.putInt("show", 1); editor.commit(); } else { boolean show_or_hide=false; mCarrierShowPreference.setChecked(show_or_hide); Editor editor = sharedPreferences.edit(); editor.putInt("show", 0); editor.commit(); } }
当设置中切换状态时,保存当前的状态到sharepreferences中。并发送广播给Systemui去进行更新。
if (preference == mCarrierShowPreference) { boolean show= (Boolean) objValue; SharedPreferences sharedPreferences = getActivity().getSharedPreferences("carrierShow_setting",getActivity().MODE_WORLD_WRITEABLE); if(show) { Editor editor = sharedPreferences.edit(); editor.putInt("show", 1); editor.commit(); } else { Editor editor = sharedPreferences.edit(); editor.putInt("show", 0); editor.commit(); } Intent mIntent = new Intent(); mIntent.setAction("CARRIER_SHOW_OR_HIDE"); mIntent.putExtra("show_or_hide", show); getActivity().sendBroadcast(mIntent); }
接下来就是再SystemUI中进行处理
/home/blandon/android/trunk/frameworks/base/packages/SystemUI/res/layout/status_bar.xml
<com.android.keyguard.AlphaOptimizedLinearLayout
android:id="@+id/notification_icon_area_inner"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- add by zhouming for carrier show or hide -->
<TextView
android:id="@+id/carrier_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/device_info_not_available"
/>
这里得注意,5.1中的Systemui的布局中,如果添加在com.android.systemui.statusbar.AlphaOptimizedFrameLayout外面,会随着锁屏界面的打开而消失,具体就是再PhoneStatusBar中控制,这里不多说。
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
private MyBroadcastReceiver mCarrierBroadcastReceiver;
mCarrierBroadcastReceiver = new MyBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("CARRIER_SHOW_OR_HIDE"); context.registerReceiver(mCarrierBroadcastReceiver, intentFilter);
该广播用来接受从设置端传来的控制参数
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean show=intent.getBooleanExtra("show_or_hide", false);
if(show) {
mCarrierText.setVisibility(View.VISIBLE);
mCarrierText.setText(carrier_text);
SharedPreferences sharedPreferences = context.getSharedPreferences("carrierShow", context.MODE_WORLD_WRITEABLE);
Editor editor = sharedPreferences.edit();
editor.putInt("show", 1);
editor.commit();
}else{
// mCarrierText.setText(carrier_text);
mCarrierText.setVisibility(View.GONE);
SharedPreferences sharedPreferences = context.getSharedPreferences("carrierShow", context.MODE_WORLD_WRITEABLE);
Editor editor = sharedPreferences.edit();
editor.putInt("show", 0);
editor.commit();
}
}
}同时得注册对ServiceState改变的监听
系统中的ServiceState改变会发送ACTION_SERVICE_STATE_CHANGED的广播,并且该广播是Stiky广播,所以当我们注册时便能收到改变。
MyPhoneStateReceiver myreceiver = new MyPhoneStateReceiver();
IntentFilter mintentFilter = new IntentFilter(ACTION_SERVICE_STATE_CHANGED);
context.registerReceiver(myreceiver, mintentFilter);
private class MyPhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_SERVICE_STATE_CHANGED)) {
Log.d(TAG, "Intent Action: ACTION_SERVICE_STATE_CHANGED");
ServiceState mServiceState = ServiceState.newFromBundle(intent.getExtras());
//switch (mServiceState.getState()) {
switch(intent.getExtras().getInt("state")){
case 0:
// mStringSer = "IN_SERVICE ";
break;
case 1:
// mStringSer = "OUT_OF_SERVICE";
break;
case 2:
// mStringSer = "EMERGENCY_ONLY";
break;
case 3:
// mStringSer = "POWER_OFF";
break;
default:
// mStringSer = "UNKNOWN";
break;
}
carrier_text=mServiceState.getOperatorAlphaLong();
if(carrier_text==null) {
carrier_text="No Service";
}
SharedPreferences sharedPreferences = context.getSharedPreferences("carrierShow", context.MODE_WORLD_WRITEABLE);
int showOrHide = sharedPreferences.getInt("show", 0);
if(showOrHide==1) {
mCarrierText.setText(carrier_text);
}
}
}
}
以上就是大致过程,小细节就没细述了,假日愉快。
相关文章推荐
- android 页面停几秒后跳转
- Android(java方法)上实现mp4的分割和拼接 (一)
- android Fragment真正的完全解析(下)
- Android Fragment的完全解析(上)
- 关于陌陌签名验证机制的研究
- 使用FlowDroid生成Android应用程序的函数调用图
- Android-Universal-Image-Loader 图片加载库
- 关于android下的raw文件的问题
- Android自定义控件之组合控件
- Android适配器进阶之up(修改完善)
- Android获取联系人电话实验
- android中部分资源的应用
- Android——apk反编译
- Android.mk
- RTMP 4 Android
- Android——init可执行程序
- Android事件分发机制
- AndroidStudio快捷键设置
- 【Android】 Activity启动模式singleTask的数据传输 onNewIntent方法
- Android启动脚本init.rc(2)