編輯:關於Android編程
MainActivity如下:
package cc.testsms;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.Toast;
/**
* Demo描述:
* 手機定時發送短信的實現
*
* 參考資料:
* 1 http://blog.csdn.net/pku_android/article/details/7548385
* 2 http://blog.csdn.net/zjbpku/article/details/7577590
* Thank you very much
*
* 暫存問題:
* 1 設置定時短信後關機重啟,定時短信失效
* 可以考慮將定時短信存入數據庫或者本地
* 2 連續多次設置定時短信,但只有最後一個會被觸發.
* 解決方式可以參見鬧鐘的源碼.
*/
public class MainActivity extends Activity {
public int year;
public int month;
public int day;
public int hour;
public int minute;
public int timedYear;
public int timedMonth;
public int timedDay;
public int timedHour;
public int timedMinute;
private Context mContext;
public Calendar calendar;
private Button mDatePickerButton;
private Button mTimePickerButton;
private EditText mContentEditText;
private Button mSendButton;
private Button mCancelButton;
public final static int DATE_PICKER = 9527;
public final static int TIME_PICKER = 9528;
public DatePickerDialog mDatePickerDialog;
public TimePickerDialog mTimePickerDialog;
private PendingIntent mTimedMessagePendingIntent=null;
private DatePickerDialog.OnDateSetListener mDateSetListener;
private TimePickerDialog.OnTimeSetListener mTimeSetListener;
public boolean isCreatePickerDialog = true;
private AlarmManager mAlarmManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
mContext=this;
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mContentEditText = (EditText) findViewById(R.id.contentEditText);
mSendButton = (Button) findViewById(R.id.sendButton);
mSendButton.setOnClickListener(new OnClickListenerImpl());
mDatePickerButton = (Button) findViewById(R.id.datePickButton);
mDatePickerButton.setOnClickListener(new OnClickListenerImpl());
mTimePickerButton = (Button) findViewById(R.id.timePickButton);
mTimePickerButton.setOnClickListener(new OnClickListenerImpl());
mCancelButton=(Button) findViewById(R.id.cancelButton);
mCancelButton.setOnClickListener(new OnClickListenerImpl());
// 監聽DatePicker的set按鈕
mDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
//保存定時短信的年月日
System.out.println("---> DatePicker設置後: year=" + year + ", month="+ monthOfYear + ",day=" + dayOfMonth);
timedYear=year;
timedMonth=monthOfYear;
timedDay=dayOfMonth;
}
};
// 監聽TimePicker的set按鈕
mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
//保存定時短信的時分
System.out.println("---> TimePicker設置後: hour=" + hourOfDay + ",minute="+ minute);
timedHour=hourOfDay;
timedMinute=minute;
}
};
}
private class OnClickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.datePickButton:
showDialog(DATE_PICKER);
break;
case R.id.timePickButton:
showDialog(TIME_PICKER);
break;
case R.id.sendButton:
sendTimedMessage();
break;
case R.id.cancelButton:
cancelTiimedMessage();
break;
default:
break;
}
}
}
// 覆寫Activty的onCreateDialog(int id)方法
// 注意:
// 1 第一次顯示pickerDialog的時候會調用onCreateDialog()和onPrepareDialog()
// 2 隨後每次只會調用onPrepareDialog()方法
// 所以需要在onPrepareDialog()方法中獲取最新時間再設置
@Override
protected Dialog onCreateDialog(int id) {
getCurrentTime();
switch (id) {
case DATE_PICKER:
mDatePickerDialog = new DatePickerDialog(this, mDateSetListener,year, month, day);
return mDatePickerDialog;
case TIME_PICKER:
mTimePickerDialog = new TimePickerDialog(this, mTimeSetListener,hour, minute, true);
return mTimePickerDialog;
default:
break;
}
return super.onCreateDialog(id);
}
// 覆寫Activty的onPrepareDialog(int id, Dialog dialog)方法
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
if (!isCreatePickerDialog) {
getCurrentTime();
switch (id) {
case DATE_PICKER:
mDatePickerDialog.updateDate(year, month, day);
break;
case TIME_PICKER:
mTimePickerDialog.updateTime(hour, minute);
break;
default:
break;
}
}
isCreatePickerDialog = false;
}
//發送定時短信
private void sendTimedMessage() {
String content = mContentEditText.getText().toString();
if (!TextUtils.isEmpty(content)) {
Intent intent=new Intent(this,AlarmBroadcastReceiver.class);
intent.setAction("alarmBroadcastReceiverAction");
intent.putExtra("content", content);
mTimedMessagePendingIntent=PendingIntent.getBroadcast(this, 0, intent, 0);
//設置定時時間
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, timedYear);
calendar.set(Calendar.MONTH, timedMonth);
calendar.set(Calendar.DAY_OF_MONTH, timedDay);
calendar.set(Calendar.HOUR_OF_DAY, timedHour);
calendar.set(Calendar.MINUTE, timedMinute);
if (calendar.getTimeInMillis()<=System.currentTimeMillis()) {
Toast.makeText(mContext, "請重新設置時間", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "成功設置定時短信", Toast.LENGTH_SHORT).show();
mAlarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), mTimedMessagePendingIntent);
}
}
}
//取消定時短信
private void cancelTiimedMessage(){
if(mTimedMessagePendingIntent!=null){
mAlarmManager.cancel(mTimedMessagePendingIntent);
Toast.makeText(mContext, "取消定時短信", Toast.LENGTH_SHORT).show();
}
}
private void getCurrentTime() {
// 設置時間為中國
calendar = Calendar.getInstance(Locale.CHINA);
// 獲取日期
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);
System.out.println("-----> 獲取當前時間 year=" + year + ",month=" + month+
",day=" + day + ",hour=" + hour + ",minute=" + minute);
}
}package cc.testsms;
import java.util.ArrayList;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.widget.Toast;
public class AlarmBroadcastReceiver extends BroadcastReceiver{
private final String TELPHONE_NUMBER="10086";
@Override
public void onReceive(Context context, Intent intent) {
SmsManager manager = SmsManager.getDefault();
String content=intent.getStringExtra("content");
System.out.println("-----> 收到廣播 content="+content);
ArrayList messages = manager.divideMessage(content);
for (String everyMessage : messages) {
manager.sendTextMessage(TELPHONE_NUMBER, null, everyMessage, null,null);
}
Toast.makeText(context, "已經發送定時短信", Toast.LENGTH_SHORT).show();
}
}
Android 自定義View視圖
創建全新的視圖將滿足我們獨特的UI需求。 本文介紹在指南針開發中會用到的羅盤的界面UI,通過繼承View類實現的自定義視圖,以此來深刻了解自定義視圖。 實現效果圖:
Android入門之TableLayout應用解析(一)
本文初步講述了Android中TableLayout的應用,對Android初學者有一定的學習借鑒價值。具體如下:TableLayout跟TableLayout 是一組搭
Android點9圖的運用
在Android UI設計開發中,我們經常會用到一些圖標、圖片來做背景等。相信很多同學都會遇到一個問題,就是我們讓美工做好一張圖,一個圖標,呃,看起來挺好看的,但是放進a
Android--Activity的生命周期(二)
1、Activity的工作原理在我們的應用程序中,當存在多個Activity切換時,他們如何切換的。在上一個文章中,我們知道了Activity生命周期的幾個函數,當Act