編輯:關於Android編程
在大多數的騷擾攔截類的軟件中都會有定時攔截這個實用的的功能,其實,也不難實現。
看圖:



在未選中啟用時間段時,下面的兩個開始時間和結束時間呈灰色狀態,並且單擊無響應,啟用時間段後,下面則變成了可以單擊的狀態,通過單擊可以彈出選擇日期與時間的對話框,用於選擇開始時間和結束時間。
主要思路:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICAgICAgICAgIDEuICDG9NPDyrG85LbOo6y9q8/Cw+a1xL/YvP6x5LPJv8m78bXDvbm149e0zKw8L3A+CjxwPiAgICAgICAgICAgICAgICAyLiAgzO2807Wlu/fKwrz+o6y1r7P2yNXG2sqxvOTRodTxttS7sL/yPC9wPgo8cD4gICAgICAgICAgICAgICAgMy4gINGh1PHKsbzko6yyos/Uyr7U2s/g06a1xM671sM8L3A+CjxwPiAgICAgICAgICAgICAgICA0LiAgzai5/VNoYXJlZFByZWZyZXNlbmNlvavP4LnYyejWw7GjtOajrNLUsePPwrTOxvS2r7PM0PLKscq508M8L3A+CjxwPiA8L3A+CjxwPiAgICAgICAgICDJ6NbDvefD5rXEsry+1s7EvP7S0dTatdrSu73auPiz9sHLo6zPwsPmyrXP1r7NyrXP1r7fzOXM7bzTyrG85LXEuabE3KGjPC9wPgo8cD4gICAgICAgICAgIMrXz8jKx7/YvP61xMn5w/ejrNXiwO/Tw7W9wctUb2dnbGVCdXR0b27AtLHtyr7BvdbW17TMrKOstbHIu8HL0rK/ydPDU3dpdGNoo6y1q8rHMi4zsrvWp7PWoaM8L3A+CjxwcmUgY2xhc3M9"brush:java;"> private ToggleButton tb_switch,tb_whiteList,tb_time; private RelativeLayout start_layout; private RelativeLayout end_layout; private TextView tv_start_time,tv_start_tip; private TextView tv_end_time,tv_end_tip; private SharedPreferences sp; SharedPreferences.Editor editor;
接著,就是從布局文件中找到相應的控件,並綁定監聽器
sp = this.getSharedPreferences("setting",Activity.MODE_PRIVATE);
editor = sp.edit();
start_layout = (RelativeLayout)findViewById(R.id.start_layout);
start_layout.setOnClickListener(new ClickEvent());
start_layout.setClickable(false);
end_layout = (RelativeLayout)findViewById(R.id.end_layout);
end_layout.setOnClickListener(new ClickEvent());
end_layout.setClickable(false);
tv_start_time =(TextView)findViewById(R.id.tv_start_time);
tv_end_time = (TextView)findViewById(R.id.tv_end_time);
tv_start_tip = (TextView)findViewById(R.id.tv_start_tip);
tv_end_tip = (TextView)findViewById(R.id.tv_end_tip);
tb_switch = (ToggleButton)findViewById(R.id.tb_switch);
tb_whiteList = (ToggleButton)findViewById(R.id.tb_whitelist);
tb_time = (ToggleButton)findViewById(R.id.tb_time);tb_switch.setOnCheckedChangeListener(new ToggleButtonCheckedEvent());
tb_whiteList.setOnCheckedChangeListener(new ToggleButtonCheckedEvent());
tb_time.setOnCheckedChangeListener(new ToggleButtonCheckedEvent());
其中,sp = this.getSharedPreferences("setting",Activity.MODE_PRIVATE);這個可以將簡單的設置信息保存到文件,注意這裡是對兩個relativeLayout添加單擊事件,這樣,就可以通過點擊設置界面中的兩個時間段選擇行,就可以彈出相應的日期時間選擇對話框。
附: SharedPreferences的用法:
1. 得到SharedPreferences對象:SharedPreferences sp = this.getSharedPreferences("setting",Activity.MODE_PRIVATE);後面的參數,表示模式,表示共享的范圍,可以查看具體文檔。
2. 存入數據:SharedPreferences.Editor editor = sp.edit();
editor.putBoolean("isStartListen",true);
editor.commit();//提交數據,這樣數據就保存到setting.xml文件中了
3. 取出數據:boolean data = sp.getBoolean("isStartListen", false),其中第二個參數false是默認值,也就是如果文件中不存在該key,就返回false。
在監聽器中實現想要的功能了,如下:
//ToggleButton開關監聽器
class ToggleButtonCheckedEvent implements OnCheckedChangeListener{
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(buttonView.getId() == R.id.tb_switch){
tb_switch.setChecked(isChecked);
if(isChecked){
editor.putBoolean("isStartListen",true);
editor.commit();
tb_switch.setBackgroundResource(R.drawable.start_service_on);
Toast.makeText(SettingActivity.this, "開啟攔截服務", 1000 ).show();
}
else{
editor.putBoolean("isStartListen",false);
editor.commit();
tb_switch.setBackgroundResource(R.drawable.start_service_off);
Toast.makeText(SettingActivity.this, "關閉攔截服務", 1000 ).show();
}
}
else if(buttonView.getId() == R.id.tb_whitelist){
tb_whiteList.setChecked(isChecked);
if(isChecked){
editor.putBoolean("isWhiteList",true);
tb_whiteList.setBackgroundResource(R.drawable.start_service_on);
Toast.makeText(SettingActivity.this, "白名單模式", 1000 ).show();
}
else{
editor.putBoolean("isWhiteList", false);
tb_whiteList.setBackgroundResource(R.drawable.start_service_off);
Toast.makeText(SettingActivity.this, "黑名單模式", 1000 ).show();
}
editor.commit();
}
else if(buttonView.getId() == 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);
editor.putBoolean("isTime", true);
Toast.makeText(SettingActivity.this, "啟用定時攔截,請設置開始時間和結束時間", 1000 ).show();
String[] time = getCurrentTime();
tv_start_time.setText(time[0]);
tv_end_time.setText(time[1]);
editor.putString("startTime", time[0]);
editor.putString("endTime", time[1]);
}
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);
editor.putBoolean("isTime", false);
Toast.makeText(SettingActivity.this, "關閉定時攔截", 1000).show();
String[] time = getCurrentTime();
tv_start_time.setText(time[0]);
tv_end_time.setText(time[1]);
}
editor.commit();
}
}
}
可以看出,監聽器中還有其他兩個ToggleButton需要實現的功能,當然了,因為目前還沒有通過service實現電話攔截的功能,所以,在之後實現攔截功能時,會在相應的地方添加代碼,這裡只實現將設置的信息保存。
下面就實現選擇日期與時間功能,並將其保存。
依然是監聽器:
class ClickEvent implements OnClickListener{
@Override
public void onClick(View v) {
Context mContext = SettingActivity.this;
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
View view = View.inflate(mContext, R.layout.data_time_dialog, null);
final DatePicker datePicker = (DatePicker)view.findViewById(R.id.data_picker);
final TimePicker timePicker = (TimePicker)view.findViewById(R.id.time_picker);
builder.setView(view);
//獲取當前日期
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
//將日期選擇器設置為當前日期
datePicker.init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH),null);
//將時間選擇器設置為當前時間
timePicker.setIs24HourView(true);
timePicker.setCurrentHour(cal.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(cal.get(Calendar.MINUTE));
if(v.getId() == start_layout.getId()){
builder.setTitle("選擇起始監聽時間");
builder.setPositiveButton("確定 ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
//取出選擇的時間,並格式化
sb.append(String.format("%02d-%02d", datePicker.getMonth()+1,datePicker.getDayOfMonth()));
//將日期與時間用空格分開
sb.append(" ");
sb.append(String.format("%02d:%02d", timePicker.getCurrentHour(),timePicker.getCurrentMinute()));
//將選擇好的日期日間顯示
tv_start_time.setText(sb);
//將時間保存到sharedPreference
editor.putString("startTime", sb.toString());
editor.commit();
showTimeErrorTip();
dialog.cancel();
}
});
}
else if(v.getId() == end_layout.getId()){
builder.setTitle("選擇結束監聽時間");
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
//取出選擇的時間,並格式化
sb.append(String.format("%02d-%02d", datePicker.getMonth()+1,datePicker.getDayOfMonth()));
//將日期與時間用空格分開
sb.append(" ");
sb.append(String.format("%02d:%02d", timePicker.getCurrentHour(),timePicker.getCurrentMinute()));
//將選擇好的日期日間顯示
tv_end_time.setText(sb);
editor.putString("endTime", sb.toString());
editor.commit();
showTimeErrorTip();
dialog.cancel();
}
});
}
//創建對話框,並顯示
Dialog dialog = builder.create();
dialog.show();
}
}
//刷新存儲時間,判斷開始時間與結束時間大小
public void showTimeErrorTip(){
//如果時間合法,則不提示,否則提示
if(sp.getString("startTime", "").compareTo(sp.getString("endTime", "")) > 0){
Toast.makeText(SettingActivity.this, "結束時間必須大於開始時間", 1000).show();
}
}
彈出的日期時間選擇界面的布局文件如下:
data_time_dialog.xml
至此,已實現了選擇日期時間,並將相關的設置信息寫入文件的功能。
《Android源碼設計模式解析與實戰》讀書筆記(十六)
第十六章、訪問者模式 訪問者模式是一種行為型模式,它是23種設計模式中最復雜的一個,雖然使用頻率不高,但是並不代表可以忽略,在合適的地方,它會帶來意想不到的靈活性。訪問者
Android手機無法連接無線網絡解決辦法匯總大全
一、手機搜索不到無線信號怎麼辦?1、在無法搜索到無線信號時,請確定無線終端在無線網絡覆蓋范圍內,點擊“掃描”刷新無線網絡列表。如下圖
Android百度地圖定位後獲取周邊位置的實現代碼
本文實例講解Android百度地圖定位後獲取周邊位置的實現代碼,分享給大家供大家參考,具體內容如下效果圖:具體代碼:1.布局文件<?xml version=
Android刮刮卡效果實現代碼
本文實例為大家分享了Android刮刮卡效果,供大家參考,具體內容如下android實現底層一張圖片,上層一個遮罩層,觸摸滑動按手指滑動路徑實現去除遮罩效果,類似於抽獎的