編輯:關於Android編程
因為我們用的是SharedPreferences來存儲用戶設置信息,那麼在初次進入來電管家時,會有一些默認的設置,後續根據用戶的設置,更新設置信息文件的內容。
打開應用程序,首先啟動的是ActivityGroupDemo,並默認顯示黑名單界面,這時,需要在ActivityGroupDemo.java中添加代碼,判斷用戶是否是第一次進入該應用,如果是第一次,則寫入默認的設置信息。
這裡判斷用戶是否為第一次進入該應用程序,采用的思路為:
1)因為SharedPreferences會在應用程序目錄下的shared_prefs/文件夾下生成文件。
2)每次啟用程序時,判斷該生成文件是否存在,如果不存在,則表示用戶是第一次進入
3) 寫入相關的默認設置信息
在ActivityGroupDemo裡添加:
private SharedPreferences spf;
spf = this.getSharedPreferences("setting", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = spf.edit(); //取出當前應用文件路徑 String path = this.getFilesDir().toString(); //找到shared_prefs/setting.xml path = path.substring(0, path.lastIndexOf("/")+1); path += "shared_prefs/setting.xml"; //利用文件是否存在,判斷程序是否為第一次啟動,如果是第一次啟動,則寫入默認值 File file = new File(path); if(!file.exists()){ //將數據放入sharedPreferences中 //默認啟用監聽 editor.putBoolean("isStartListen", false); //默認是白名單模式 editor.putBoolean("isWhiteList", false); //默認不啟用時間段 editor.putBoolean("isTime", false); editor.putString("startTime", null); editor.putString("endTime", null); //提交當前設置數據 editor.commit(); }
通過上述幾行代碼,即可判斷用戶是否是第一次進入應用程序。
試想一下,如果不保存用戶的設置信息,那麼下次用戶進入程序進,打開設置界面,顯示的肯定是程序內定義的默認設置,而不是用戶上次在應用中的設置,為了實現程序的設置會隨著用戶設置的不同而變化,就需要在每次進入設置界面時,讀取用戶的上次的設置信息,並將設置信息配置在設置界面中。
主要思路:
1. 在設置界面Activity的oncreate方法裡實現讀取用戶設置信息文件
2. 將讀取到的用戶設置信息文件加載到設置界面中
在SettingActivity.java中添加如下代碼:
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); …… loadSetting(); } //讀取設置信息,並加載到設置界面中 public void loadSetting(){ //取出設置數據,設置相應的按鈕開關 loadSettingImage(tb_switch,sp.getBoolean("isStartListen", false)); loadSettingImage(tb_whiteList,sp.getBoolean("isWhiteList", false)); loadSettingImage(tb_time,sp.getBoolean("isTime", false)); tb_switch.setOnCheckedChangeListener(new ToggleButtonCheckedEvent()); tb_whiteList.setOnCheckedChangeListener(new ToggleButtonCheckedEvent()); tb_time.setOnCheckedChangeListener(new ToggleButtonCheckedEvent()); } //根據設置信息配置控件顯示 public void loadSettingImage(View v,boolean isChecked){ switch(v.getId()){ case R.id.tb_switch : tb_switch.setChecked(isChecked); if(isChecked){ tb_switch.setBackgroundResource(R.drawable.start_service_on); getApplicationContext().startService(intent); } else tb_switch.setBackgroundResource(R.drawable.start_service_off); break; case R.id.tb_whitelist : tb_whiteList.setChecked(isChecked); if(isChecked) tb_whiteList.setBackgroundResource(R.drawable.start_service_on); else tb_whiteList.setBackgroundResource(R.drawable.start_service_off); break; case R.id.tb_time : tb_time.setChecked(isChecked); if(isChecked){ tb_time.setBackgroundResource(R.drawable.start_service_on); start_layout.setClickable(true); end_layout.setClickable(true); tv_start_tip.setTextColor(Color.BLACK); tv_start_time.setTextColor(Color.BLACK); tv_end_tip.setTextColor(Color.BLACK); tv_end_time.setTextColor(Color.BLACK); tv_start_time.setText(sp.getString("startTime", "")); tv_end_time.setText(sp.getString("endTime", "")); } else{ tb_time.setBackgroundResource(R.drawable.start_service_off); tv_start_tip.setTextColor(Color.GRAY); tv_start_time.setTextColor(Color.GRAY); tv_end_tip.setTextColor(Color.GRAY); tv_end_time.setTextColor(Color.GRAY); start_layout.setClickable(false); end_layout.setClickable(false); String[] time = getCurrentTime(); tv_start_time.setText(time[0]); tv_end_time.setText(time[1]); } break; } }
這樣,應用的設置信息就會隨著用戶的設置而變化。
上一節已實現了電話的按規則攔截功能,那麼什麼時候開始攔截,又什麼時候停止攔截呢。在設置界面的第一項,啟用攔截,看到了吧,就在這裡啟用與關閉服務。
要啟動一個服務,當然要用到了Intent了,並且還得設置Intent的action了,在SettingActivity.java的oncreate函數中添加:
Intent intent;
intent = new Intent("com.example.callmanager.ListenService");
當啟用監聽時,也就是ToggleButton呈選中狀態時,啟動該服務,添加如下代碼:
//啟用服務 getApplicationContext().startService(intent);
當關閉監聽時,也就是ToggleButton呈未選中狀態時,停止該服務,添加如下代碼:
//關閉服務 getApplicationContext().stopService(intent);
至此,就實現了用加載用戶設置並啟用監聽服務
自定義View學習的最後一期了,先上效果圖。 相信大家心中都有自己的實現方法,這裡就貼上我的方法以供參考。/** * 刻度畫筆 */ private P
前面幾篇我們講解了 QtAndroid 名字空間的基本用法,這次我們使用前面講過的方法和類庫,展示一些簡單的小示例。我在《Qt on Android核心編程》一書中主要通
Android Studio作為Google的親兒子,Nexus手機系列所收到的待遇大家有目共睹.Android5.0出來之後,Nexus5第一時間就升級到了最新的系統.
ImageSwitcher類是ViewSwitcher類的子類,它實現的效果是在完成ImageView的切換並且帶有動畫效果。要使用這個類需要以下兩個步驟:1)為Imag