在上一篇的博文中,我们将我们的android小项目的简单的界面做了一下(简单的不能再简单的界面),下面就让我们看一下到底是怎么样一步一步的将这一个小项目实现的,废话不多说,直接上代码:

1.下面是主Activity


package android.dck.demo;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;

public class MyAlarmManagerDemo extends Activity {
	private AlarmManager alarm = null;							// 闹钟管理
	private Button set = null;									// 按钮组件
	private TextView msg = null;								// 文本显示组件
	private Calendar calendar = Calendar.getInstance();			// 取得Calendar对象
	private TimePicker time = null;								// 时间选择器
	private int hourOfDay = 0;									// 保存设置的时
	private int minute = 0;										// 保存设置的分
	private ListView listview;
	//设置数据类型
	private List<String> listdata;
	private ArrayAdapter<String> adapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		init();
		//初始化数据源
		listdata=new ArrayList<String>();
		//初始化适配器
		adapter=new ArrayAdapter<String>(MyAlarmManagerDemo.this,
				android.R.layout.simple_expandable_list_item_1,listdata);
		
		/**
		 * 等到我们刷新的时候我们在将适配器与listview绑定一次
		 */
	}
	//初始化方法
	public void init(){
		time = (TimePicker)findViewById(R.id.time); // 取得时间选择器
		set = (Button)findViewById(R.id.set); 		// 取得按钮组件
		msg = (TextView)findViewById(R.id.msg);		// 取得组件
		listview=(ListView) findViewById(R.id.listView);
		
		set.setOnClickListener(new SetOnClickListenerImpl()); // 设置单击事件
		
		alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 		// 取得闹钟服务
		
		time.setOnTimeChangedListener(
				new OnTimeChangedListenerImpl());	 			// 设置时间改变监听
		
		time.setIs24HourView(true); 						// 24小时制
		
		//通过给listview设置长按事件,从而我们来删除闹钟
		listview.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> arg0, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				int hour,minute;
				String result[]=listdata.get(position).trim().split(":");
				//将其转化为整数形式
				hour=Integer.parseInt(result[0]);
				minute=Integer.parseInt(result[1]);
				
				Intent intent=new Intent(MyAlarmManagerDemo.this,
						MyAlarmReceiver.class);
				intent.setAction("dck.cqq.com.android");
				PendingIntent pend=PendingIntent.getBroadcast(MyAlarmManagerDemo.this, 
						hour+minute,intent,PendingIntent.FLAG_UPDATE_CURRENT);
				//下面我们将闹钟取消掉
				alarm.cancel(pend);
				
				listdata.remove(position);
				/**
				 * 当我们适配器中的数据发生改变时,我们需要重新设置一下适配器,并通知数据发生改变
				 */
				//刷新适配器
				listview.setAdapter(adapter);
				//通知数据发生变化
				adapter.notifyDataSetChanged();
				
				Toast.makeText(MyAlarmManagerDemo.this, "闹钟删除成功!",
						Toast.LENGTH_SHORT).show();				// 显示提示信息
				return false;
			}
		});
	}
	//监听器
	private class OnTimeChangedListenerImpl implements OnTimeChangedListener {
		@Override
		public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
			//java.util.Calendar.setTimeInMillis(long) 方法从给定的long值设置日历的当前时间。
			MyAlarmManagerDemo.this.calendar.setTimeInMillis(System
					.currentTimeMillis());					// 设置当前时间
			
			MyAlarmManagerDemo.this.calendar.set(Calendar.HOUR_OF_DAY,
					hourOfDay);								// 设置小时
			
			MyAlarmManagerDemo.this.calendar.
					set(Calendar.MINUTE, minute);			// 设置分钟
			
			MyAlarmManagerDemo.this.calendar.
					set(Calendar.SECOND, 0);				// 设置秒
			
			MyAlarmManagerDemo.this.calendar.
					set(Calendar.MILLISECOND, 0);			// 设置毫秒
			
			MyAlarmManagerDemo.this.hourOfDay = hourOfDay; 	// 保存设置的小时
			
			MyAlarmManagerDemo.this.minute = minute; 		// 保存设置的分钟
		}

	}
	private void saveData(int hour, int min) {
		// TODO Auto-generated method stub
		String result=hour+":"+min;
		listdata.add(result);
		/**
		 * 等到我们刷新的时候我们在将适配器与listview绑定一次
		 */
		listview.setAdapter(adapter);
		//通知数据发生变化
		adapter.notifyDataSetChanged();
		
	}
	
	//监听设置按钮
	private class SetOnClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View view) {
			Intent intent = new Intent(MyAlarmManagerDemo.this,
					MyAlarmReceiver.class); 				// 指定跳转的Intent
			intent.setAction("dck.cqq.com.android"); 	// 定义广播的Action
			
			PendingIntent sender = PendingIntent.getBroadcast(
					MyAlarmManagerDemo.this,calendar.get(Calendar.HOUR_OF_DAY)+calendar.get(Calendar.MINUTE), intent,
					PendingIntent.FLAG_UPDATE_CURRENT);		// 指定PendingIntent
			
			//Calendar.getTimeInMillis() 方法返回此Calendar以毫秒为单位的时间。
			//其实这个类就是获取当前的时间
			MyAlarmManagerDemo.this.alarm.set(AlarmManager.RTC_WAKEUP,
					MyAlarmManagerDemo.this.calendar.getTimeInMillis(), 
					sender);								// 设置闹钟
			//将数据存入到适配器中
			saveData(calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE));
			//设置闹钟
			MyAlarmManagerDemo.this.msg.setText("闹钟响起的时间是:"
					+ MyAlarmManagerDemo.this.hourOfDay + "时"
					+ MyAlarmManagerDemo.this.minute + "分。");	// 提示文字
			
			Toast.makeText(MyAlarmManagerDemo.this, "闹钟设置成功!",
					Toast.LENGTH_SHORT).show();				// 显示提示信息
		}
	}
}



2.AlarmMessage


package android.dck.demo;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;

public class AlarmMessage extends Activity {
	private NotificationManager manager;
	private Notification notification;
	private MediaPlayer media;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//首先我们要获取服务
		manager=(NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);
		//初始化一个通知
		notification=new Notification(R.drawable.messagedck,
				"要工作了",System.currentTimeMillis());
		Intent intent=new Intent(AlarmMessage.this,ShowMessActivity.class);
		PendingIntent in=PendingIntent.getActivity(AlarmMessage.this,
				0, 
				intent,
				PendingIntent.FLAG_UPDATE_CURRENT);
		notification.setLatestEventInfo(AlarmMessage.this, 
				"努力上班",
				"为了老婆,再累也心甘情愿",
				in);
		notification.defaults=Notification.DEFAULT_ALL;
		manager.notify(1,notification);
		
		//然后播放音乐
		 media=MediaPlayer.create(this,R.raw.music);
		 //设置循环播放
		 media.setLooping(true);
		 //开始播放
		 media.start();
		//在这里我们利用了一个对话框机制
		new AlertDialog.Builder(this)								// 建立对话框
				.setIcon(R.drawable.pic_m)							// 设置图标
				.setTitle("闹钟时间已到!")							// 设置对话框标题
				.setMessage(										// 定义显示文字
						"闹钟响起,现在时间:"
								+ new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒")
										.format(new Date(System
												.currentTimeMillis())))
				.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						media.stop();
						//用完了一定压迫释放资源
						media.release();
						AlarmMessage.this.finish();					// 关闭对话框后本程序结束
					}
				}).show();											// 显示对话框
		//下面我们还要发送一个通知
		
	}
}



3.广播接受者


ublic class MyAlarmReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Intent it = new Intent(context, AlarmMessage.class);	// 定义要操作的Intent
		it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);				// 传递一个新的任务标记
		//在这里用到了上下文对象
		context.startActivity(it);								// 启动Intent
	}

}

4.设置当通知被点击时要进入的界面


public class ShowMessActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.show);
	}

}



最后,总结一下,开发这个项目用了一节课的时间,我觉得我们还是要把基础打好,我今天做这个小程序就是把以前零碎的只是做了一下总结,也想着作为一个学习的资料,帮助大家提高自己,还是那句话,我们要有自己的核心竞争力,现在的IT培训机构漫天飞舞,我们的行业也是鱼龙混珠,但是只要你是科班出身,你是干这一行,爱这一行的,要知道,你的本领就像酒一样,时间越久,你的价值越大,祝愿我们的大Android未来无限.