android 闹钟与通知---练习

来源:互联网 发布:sql developer怎么卸载 编辑:程序博客网 时间:2024/06/06 04:07

获取闹钟管理者(AlarmManager) getSystemService(Context.ALARM_SERVICE);
设置闹钟时间弹出时间对话框 TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {…..},当前的时,分,是否是24小时制);
timePickerDialog.show();

//一次性闹钟
AlarmManager.set(唤醒屏幕,闹铃响的时间,执行的响应);
//周期性闹钟
alarmManager.setRepeating(唤醒屏幕,闹铃响的时间,再次执行的时间,执行的响应);

alarmManager.cancel(pendingIntent);取消响应

广播跳Acitivity要给Intent设置标志位Flag
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

通知栏:
NotificationCompat.Builder notificationCompat=new NotificationCompat.Builder(this);
建立通知栏,给通知栏设置标题之类的值

设置点击时关闭
notificationCompat.setAutoCancel(true);

得到通知管理器
NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
发送通知
notificationManager.notify(0x101,notification);

以上为重要方法;

测试代码:
设置闹钟页面:

public class MainActivity extends AppCompatActivity {    private AlarmManager alarmManager;    private PendingIntent pendingIntent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);    }    public void setAlarmOne(View view){        final Calendar calendar=Calendar.getInstance();        int hours=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();                intent.setAction("com.example.informactivity.RING");                pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);                //设置闹钟  (唤醒屏幕,闹铃的毫秒值,)                alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), pendingIntent);            }        },hours,minute,true);        timePickerDialog.show();    }    public void setAlarmCycle(View view){        final Calendar calendar=Calendar.getInstance();        int hours=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();                intent.setAction("com.example.informactivity.RING");                pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);                //设置闹钟  (唤醒屏幕,闹铃的毫秒值,多久会再次响铃,执行响应)                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),5000, pendingIntent);            }        },hours,minute,true);        timePickerDialog.show();    }    public void cancelAlarmCycle(View view){        alarmManager.cancel(pendingIntent);    }}

广播

public class RingActivity extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        if ("com.example.informactivity.RING".equals(intent.getAction())){            Intent intent1=new Intent(context,AringActivity.class);            //广播跳Acitivity要给Intent设置标志位Flag            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            //Intent的组成部分:ComponementName extra  Action Data Categlay(分组) Flag            context.startActivity(intent1);        }    }}

闹钟响铃页面及通知栏

public class AringActivity extends AppCompatActivity {    private MediaPlayer mediaPlayer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_aring);        mediaPlayer = MediaPlayer.create(this, R.raw.love);        mediaPlayer.start();        NotificationCompat.Builder notificationCompat=new NotificationCompat.Builder(this);        //设置参数        notificationCompat.setDefaults(NotificationCompat.DEFAULT_ALL);        notificationCompat.setContentTitle("提示");        notificationCompat.setContentText("十二款应用等待更新,点击可关闭应用栏。");        notificationCompat.setSmallIcon(android.R.drawable.ic_lock_idle_alarm);       //设置点击时关闭        notificationCompat.setAutoCancel(true);        Notification notification=notificationCompat.build();        //通知管理器        NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);        //发送通知        notificationManager.notify(0x101,notification);    }    public void close(View view){        mediaPlayer.stop();        finish();    }}

配置:

        <receiver android:name=".RingActivity">            <intent-filter>                <action android:name="com.example.informactivity.RING" />            </intent-filter>        </receiver>

略微复杂的闹钟:http://blog.csdn.net/wdaming1986/article/details/7461043
通知栏常与问题及自定义用法:http://blog.csdn.net/vipzjyno1/article/details/25248021
自定义:
http://blog.sina.com.cn/s/blog_80a855370101hqsq.html

0 0