对“定时提醒”的修正,用AlarmManager实现的,还未测试,有误再改
InternalTip.java
package com.wind.internaltip;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
public class InternalTip extends Activity {
public static final int DEFAULE_INTERNAL_TIME = 60 * 60; //unit is second
public static final int INVALID = -1;
protected static final String TAG = null;
static String PREFS_NAME = "data";
private EditText mInternalTimer;
private Button mOK;
private CheckBox mTurnOn;
private AlarmManager mAm;
PendingIntent mPi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_internal_tip);
findViewById();
addListenerForView();
SharedPreferences sharedata = getSharedPreferences(InternalTip.PREFS_NAME, 0);
boolean turn_on = sharedata.getBoolean("turn_on", false);
int internal_time = sharedata.getInt("interanl_time", 0);
if(internal_time > 0){
mInternalTimer.setText("" + internal_time / (1000 * 60));
}
mTurnOn.setChecked(turn_on);
initAlarm();
}
private void initAlarm() {
mAm = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent();
intent.setClass(InternalTip.this, TipService.class);
mPi = PendingIntent.getService(InternalTip.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
private void findViewById() {
mInternalTimer = (EditText) this.findViewById(R.id.editText1);
mOK = (Button) this.findViewById(R.id.button1);
mTurnOn = (CheckBox) this.findViewById(R.id.checkBox1);
}
private void addListenerForView() {
mTurnOn.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(isChecked){
SharedPreferences.Editor sharedata = getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit();
sharedata.putBoolean("turn_on", true);
sharedata.commit();
}else{
SharedPreferences.Editor sharedata = getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit();
sharedata.putBoolean("turn_on", false);
sharedata.commit();
}
}
});
mOK.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(!mTurnOn.isChecked()){
Log.v(TAG, "mTurnOn isChecked");
mAm.cancel(mPi);
finish();
}
int internal_time;
if(mInternalTimer.getText().toString().trim().length() == 0){
internal_time = DEFAULE_INTERNAL_TIME;
}else{
try {
internal_time = Integer.valueOf(mInternalTimer.getText().toString()).intValue() * 60;
} catch (NumberFormatException e) {
internal_time = DEFAULE_INTERNAL_TIME;
e.printStackTrace();
}
}
SharedPreferences.Editor sharedata = getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit();
sharedata.putInt("interanl_time", internal_time * 1000);
sharedata.commit();
mAm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + internal_time * 1000, internal_time * 1000, mPi);
finish();
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Intent intent = new Intent();
intent.setClass(this, TipService.class);
intent.putExtra("command_stop", true);
InternalTip.this.startService(intent);
return super.onKeyDown(keyCode, event);
}
}
TigService.java
package com.wind.internaltip;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.os.IBinder;
public class TipService extends Service{
protected static final String TAG = "TipService";
private boolean turn_on = false;
private MediaPlayer mMediaPlayer;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
mMediaPlayer = MediaPlayer.create(this, R.raw.yixiu);
//TODO 如果是网络或者设备本身的音乐,可以用如下方法创建MediaPlayer
/*mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource("/data/data/xxx.mp3");
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
SharedPreferences sharedata = getSharedPreferences(InternalTip.PREFS_NAME, 0);
turn_on = sharedata.getBoolean("turn_on", false);
if(intent.getExtras()!= null && intent.getBooleanExtra("command_stop", false)){
stopAudio();
}else if(turn_on){
playAudio();
}
return super.onStartCommand(intent, flags, startId);
}
private synchronized void playAudio(){
//exception time
/*Date date = new Date();
int currentHour = date.getHours();
int currentMinute = date.getMinutes();
if(currentHour < 9 || currentHour > 18 ||
currentHour == 13 ||
currentHour == 12 && currentMinute > 30) {
return;
}*/
if(mMediaPlayer != null){
mMediaPlayer.stop();
}else{
mMediaPlayer = MediaPlayer.create(this, R.raw.yixiu);
}
try {
mMediaPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mMediaPlayer.start();
}
private synchronized void stopAudio(){
if(mMediaPlayer != null){
mMediaPlayer.stop();
}
}
@Override
public void onDestroy() {
if(mMediaPlayer != null){
try {
mMediaPlayer.release();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.onDestroy();
}
}