主要是通过广播,实现一个闹钟的简易功能。

实现效果如下:

主界面为一个简易的设置闹钟Button,点击“设置闹钟”弹出时间设置窗。设置成功后,会自动弹出弹窗,提示“时间到了”。

Android系统闹钟代码 android studio 闹钟案例_ide


打开Android Studio,选择File>New>New Project,选择Phone and Tablet设备下的Empty Activity,创建项目名称为“DrinkRemind”,并点击“Finish”,完成项目创建。

首先打开资源文件夹“res>layout>activity_main.xml”布局文件,创建主界面。这里我们需要一个设置闹钟的button,修改activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
	android:orientation="vertical"    
	android:layout_width="fill_parent"    
	android:layout_height="fill_parent"    
	xmlns:app="http://schemas.android.com/apk/res-auto"    
	xmlns:tools="http://schemas.android.com/tools"    
	tools:context=".MainActivity">  
	  
	<Button        
		android:id="@+id/set_clock"        
		android:layout_width="fill_parent"        
		android:layout_height="wrap_content"        
		android:text="设置闹钟"/>
</LinearLayout>

在MainActivity.java中,通过闹钟管理器 AlarmManager 来设定闹钟,通过TimePickerDialog 弹出闹钟设置窗口。修改MainActivity.java中的代码如下:

public class MainActivity extends Activity {    
	private Button btn;    
	private AlarmManager alarmManager;  //闹钟管理器    
	
	@Override    
	protected void onCreate(Bundle savedInstanceState) {        
		super.onCreate(savedInstanceState);        
		setContentView(R.layout.activity_main);        

		//获取闹钟管理器        
		alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);        

		btn = (Button)findViewById(R.id.set_clock);        
		btn.setOnClickListener(new View.OnClickListener() {            
			@Override            
			public void onClick(View view) {                
				setClock(view);            
			}        
		});   
	}    

	public void setClock(View view){        
		//获取当前系统时间        
		Calendar calendar = Calendar.getInstance();        
		int hour = calendar.get(Calendar.HOUR_OF_DAY);        
		int minute = calendar.get(Calendar.MINUTE);        

		//弹出闹钟框        
		TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {            
			@Override            
			public void onTimeSet(TimePicker view, int hourOfDay, int minute) {                
				Calendar c = Calendar.getInstance();    //获取日期对象           
				c.set(Calendar.HOUR_OF_DAY, hourOfDay); //设置闹钟小时数              
				c.set(Calendar.MINUTE, minute); //设置闹钟分钟数                
				Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);                
				//创建pendingIntent                
				PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0X102, intent,0);                
				//设置闹钟                
				alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
				Toast.makeText(MainActivity.this, "闹钟设置成功", Toast.LENGTH_SHORT).show();            
			}        
		},hour,minute,true);        
		timePickerDialog.show();    
	}
}

当闹钟到达设定时间后,需要显示闹钟的提醒框,这里新建AlarmActivity.java类,设置闹钟的提醒框,代码如下:

public class AlarmActivity extends Activity {    
	@Override    
	public void onCreate(Bundle savedInstanceState) {        
		super.onCreate(savedInstanceState);        

	//显示闹钟提醒框        
	new AlertDialog.Builder(AlarmActivity.this)                
		.setTitle("闹钟")                
		.setMessage("时间到了")                
		.setPositiveButton("确定", new DialogInterface.OnClickListener(){                    
			public void onClick(DialogInterface dialogInterface, int which) {
				AlarmActivity.this.finish();                    
			}                
		}).create().show();   
	}
}

创建一个广播接收类AlarmReceiver,继承BroadcastRecevice并实现OnReceive方法即可。当广播发送后,系统会去检查广播接收器的过滤器与广播所发送的Intent是否一致, 如果一致则调用OnReceive方法。一旦接收到广播,则会立即在OnReceive方法里调用AlarmActivity,显示“时间到了”的弹窗。由于使用到了广播机制,所以就算不开着AlarmActivity,也可以在后台监控这个广播。AlarmReceiver实现代码如下:

public class AlarmReceiver extends BroadcastReceiver { 
   
	@Override    
	public void onReceive(Context context, Intent intent) {        
		Intent i = new Intent(context, AlarmActivity.class);
		i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        
		context.startActivity(i);    
	}
}

广播类AlarmReceiver和提醒框类AlarmActivity需要在Manifest.xml中进行配置,打开AndroidMainfest.xml,在< application> 标签下增加配置。

进行配置,打开AndroidMainfest.xml,在<application>标签下增加配置。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="com.example.drinkremind">    

	<application        
		android:allowBackup="true"        
		......        
		<activity android:name=".MainActivity">            
			<intent-filter>                
				<action android:name="android.intent.action.MAIN" />                
				<category android:name="android.intent.category.LAUNCHER" />            
			</intent-filter>        
		</activity>        
		<activity android:name=".AlarmActivity"/>        
		<receiver android:name=".AlarmReceiver" android:process=":remote"/>    
	</application>
</manifest>

基于以上代码,我们就实现了一个简单的Android端的闹钟提醒App,运行后,点击主界面的“设置闹钟”按键,效果如图所示。

Android系统闹钟代码 android studio 闹钟案例_ide_02


完成闹钟设置,等待至到达闹钟设置时间后,界面会自动弹出“时间到了”的提醒框,如图所示。

Android系统闹钟代码 android studio 闹钟案例_android_03