Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android項目 之 來電管家(7) ----- 加載用戶設置並啟監聽用服務

android項目 之 來電管家(7) ----- 加載用戶設置並啟監聽用服務

編輯:關於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);


至此,就實現了用加載用戶設置並啟用監聽服務



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved