定时提醒2

对“定时提醒”的修正,用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();
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值