zoukankan      html  css  js  c++  java
  • Android闹钟服务详解

    通常情况下我们有这样的需求,规定程序在指定的时间内启动,这样就用到了android为我们提供的闹钟服务

    下面就一个简单的例子,来说明如何使用android的闹钟服务

    1、首先创建布局文件

    <?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" 
    	android:gravity="center_horizontal">
    	<TimePicker 
    		android:id="@+id/time" 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content" />
    	<TextView 
    		android:id="@+id/msg" 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content" 
    		android:text="当前没有设置闹钟" />
    	<Button 
    		android:id="@+id/set" 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content" 
    		android:text="设置闹钟" />
    	<Button 
    		android:id="@+id/delete" 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content" 
    		android:text="删除闹钟" />
    </LinearLayout>
    

     第二步:在activity中使用闹钟服务

    package com.jiao.alarm;
    
    import java.util.Calendar;
    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.Button;
    import android.widget.TextView;
    import android.widget.TimePicker;
    import android.widget.TimePicker.OnTimeChangedListener;
    import android.widget.Toast;
    
    public class MyAlarmManager extends Activity {
    	private AlarmManager alarm = null;							// 闹钟管理
    	private Button set = null;									// 按钮组件
    	private Button delete = null;								// 按钮组件
    	private TextView msg = null;								// 文本显示组件
    	private Calendar calendar = Calendar.getInstance();			// 取得Calendar对象
    	private TimePicker time = null;								// 时间选择器
    	private int hourOfDay = 0;									// 保存设置的时
    	private int minute = 0;										// 保存设置的分
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		super.setContentView(R.layout.main); 					// 调用布局管理器
    		time = (TimePicker) super.findViewById(R.id.time); // 取得时间选择器
    		set = (Button) super.findViewById(R.id.set); 		// 取得按钮组件
    		delete = (Button) super.findViewById(R.id.delete); // 取得按钮组件
    		msg = (TextView) super.findViewById(R.id.msg);		// 取得组件
    		set.setOnClickListener(new SetOnClickListenerImpl()); // 设置单击事件
    		delete.setOnClickListener(new DeleteOnClickListenerImpl()); // 设置单击事件
    		alarm = (AlarmManager) super.getSystemService(Context.ALARM_SERVICE); 	// 取得闹钟服务
    		time.setOnTimeChangedListener(new OnTimeChangedListenerImpl());	 // 设置时间改变监听
    		time.setIs24HourView(true); // 24小时制
    	}
    
    	private class OnTimeChangedListenerImpl implements OnTimeChangedListener {
    		@Override
    		public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
    			calendar.setTimeInMillis(System.currentTimeMillis());	// 设置当前时间
    			calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);		// 设置小时
    			calendar.set(Calendar.MINUTE, minute);	// 设置分钟
    			calendar.set(Calendar.SECOND, 0);	// 设置秒
    			calendar.set(Calendar.MILLISECOND, 0);	// 设置毫秒
    			hourOfDay = hourOfDay; 	// 保存设置的小时
    			minute = minute; 		// 保存设置的分钟
    		}
    	}
    
    	private class SetOnClickListenerImpl implements OnClickListener {
    		@Override
    		public void onClick(View view) {
    			Intent intent = new Intent(MyAlarmManager.this,MyAlarmReceiver.class); // 指定跳转的Intent
    			intent.setAction("com.jiao.action.setalarm"); 	// 定义广播的Action
    			PendingIntent sender = PendingIntent.getBroadcast(MyAlarmManager.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);	// 指定PendingIntent
    			alarm.set(AlarmManager.RTC_WAKEUP,MyAlarmManager.this.calendar.getTimeInMillis(), sender);	// 设置闹钟
    			msg.setText("闹钟响起的时间是:"+ hourOfDay + "时"+ minute + "分。");	// 提示文字
    			Toast.makeText(MyAlarmManager.this, "闹钟设置成功!",Toast.LENGTH_SHORT).show();	// 显示提示信息
    		}
    	}
    
          	private class DeleteOnClickListenerImpl implements OnClickListener {
    		@Override
    		public void onClick(View view) {
    			if (alarm != null) {
    				Intent intent = new Intent(MyAlarmManager.this,MyAlarmReceiver.class);// 设置Intent
    				PendingIntent sender = PendingIntent.getBroadcast(MyAlarmManager.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);	// 指定PendingIntent
    				alarm.cancel(sender);	// 取消闹钟
    				msg.setText("当前没有设置闹钟。");	// 提示文字
    				Toast.makeText(MyAlarmManager.this, "闹钟删除成功!",Toast.LENGTH_SHORT).show();	// 显示提示信息
    			}
    		}
    
    	}
    }
    

     第三步:在上一步的代码中自定义了一个广播接收者,所以再创建一个广播接收者

    package com.jiao.alarm;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    public class MyAlarmReceiver extends BroadcastReceiver {
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		Intent it = new Intent(context, AlarmMessage.class);// 定义要操作的Intent,要转到的activity在这里设置就可以了
    		it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);	// 传递一个新的任务标记
    		context.startActivity(it);	// 启动Intent
    	}
    
    }
    

     最后记得在清单文件中配置,注册广播接收者

    <receiver 
      android:name="MyAlarmReceiver" 
      android:enabled="true"
      android:process=":remote">
    	  <intent-filter>
    		<action android:name="com.jiao.action.setalarm" />
    	  </intent-filter>
    </receiver>
    
  • 相关阅读:
    window.open 子窗口关闭刷新父页面
    window.open打开新窗口报错ie 位指明错误,原因是window没有加引号!
    ORA-22922: 不存在的 LOB 值 可以使用外层嵌套wm_concat()解决
    子窗口打开父窗口
    页面加载时触发事件
    json
    orcale 函数wm_concat不存咋lob值使用zh_concat 替换
    mongo常见错误
    mongo中插入数据,出现id重复
    cpu占用率
  • 原文地址:https://www.cnblogs.com/all88/p/2997558.html
Copyright © 2011-2022 走看看