Android闹钟 AlarmManager的使用和通知的使用
2017-02-22 23:02
417 查看
package com.zking.myalarm;import java.util.Calendar;import java.util.Date;import java.util.Locale;import android.media.RingtoneManager;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.app.TimePickerDialog.OnTimeSetListener;import android.content.Intent;import android.database.Cursor;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TimePicker;public class AlarmActivity extends Activity { private static final String TAG = "AlarmActivity"; AlarmManager alarmManager; Calendar calendar = Calendar.getInstance(Locale.CHINESE); Button setTime; Button setRing; Button setOver; Uri ringUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alarm); alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); setTime = (Button) findViewById(R.id.setTime); setRing = (Button) findViewById(R.id.setRing); setOver = (Button) findViewById(R.id.setOver); //setTime(); //setRingtone(); setTimeAndRing(); } private void setTimeAndRing(){ setTime.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { setTime(); } }); setRing.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { setRingtone(); } }); setOver.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { setAlarm(calendar); } }); } //启动闹玲,设置闹玲 private void setAlarm(Calendar calendar){ Intent intent = new Intent(); intent.setClass(this, AlarmBroadcastReceiver.class); intent.putExtra("msg", "Get up!Get up!"); intent.putExtra("ringURI", ringUri.toString()); Log.d(TAG, ringUri.toString()); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), pendingIntent); } //设置时间 private void setTime(){ Date date = new Date(); calendar.setTime(date); int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); new TimePickerDialog(this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int hour, int minute) { calendar.set(Calendar.HOUR,hour); calendar.set(Calendar.MINUTE,minute); } }, hour, minute, true).show(); } //设置闹玲铃声 private void setRingtone(){ Intent intent = new Intent(); intent.setAction(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置闹玲铃声"); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL); Uri pickedUri = RingtoneManager.getActualDefaultRingtoneUri(this,RingtoneManager.TYPE_ALARM); if (pickedUri!=null) { intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,pickedUri); ringUri = pickedUri; } startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode!=RESULT_OK) { return; } switch (requestCode) { case 1: //获取选中的铃声的URI Uri pickedURI = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); Log.i(TAG,pickedURI.toString()); RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, pickedURI); getName(RingtoneManager.TYPE_ALARM); break; default: break; } } private void getName(int type){ Uri pickedUri = RingtoneManager.getActualDefaultRingtoneUri(this, type); Log.i(TAG,pickedUri.toString()); Cursor cursor = this.getContentResolver().query(pickedUri, new String[]{MediaStore.Audio.Media.TITLE}, null, null, null); if (cursor!=null) { if (cursor.moveToFirst()) { String ring_name = cursor.getString(0); Log.i(TAG,ring_name); String[] c = cursor.getColumnNames(); for (String string : c) { Log.i(TAG,string); } } cursor.close(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.alarm, menu); return true; }}布局文件<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/setTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="设置时间"/> <Button android:id="@+id/setRing" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/setTime" android:text="设置铃声"/> <Button android:id="@+id/setOver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/setRing" android:text="设置完成"/></RelativeLayout>广播接收闹铃信息:package com.zking.myalarm;import java.io.IOException;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.media.MediaPlayer;import android.net.Uri;import android.util.Log;import android.widget.Toast;public class AlarmBroadcastReceiver extends BroadcastReceiver { Uri ringUri; @Override public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra("msg"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); MediaPlayer mp = new MediaPlayer(); String uri = intent.getStringExtra("ringURI"); if (uri!=null) { ringUri = Uri.parse(uri); Log.d("AlarmActivity", ringUri.toString()); } try { mp.setDataSource(context, ringUri); mp.prepare(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mp.start(); }}在manifest文件中注册广播<receiver android:name="com.zking.myalarm.AlarmBroadcastReceiver"></receiver>
Android 通知栏Notification的整合
功能作用
1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信) 2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等) 3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等)元素:1. 标题 Title/Name2. 大图标 Icon/Photo3. 内容文字 4. 内容信息 MESSAGE5. 小图标 SecondaryIcon6. 通知的时间 Timestamp,默认为系统发出通知的时间,也可通过setWhen()来设置状态通知栏主要涉及到2个类: Notification 和 NotificationManager Notification为通知信息类,它里面对应了通知栏的各个属性NotificationManager : 是状态栏通知的管理类,负责发通知、清除通知等操作。注意:NotificationManager 是一个系统Service,所以必须通过getSystemService(NOTIFICATION_SERVICE)方法来获取,方法如下。NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 第一步:获取状态通知栏管理:[java]view plaincopy NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 第二步:实例化通知栏构造器NotificationCompat.Builder:[java]view plaincopy NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 第三步:对Builder进行配置:mBuilder.setContentTitle("测试标题")//设置通知栏标题 .setContentText("测试内容") /<span style="font-family: Arial;">/设置通知栏显示内容</span> .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //设置通知栏点击意图 // .setNumber(number) //设置通知集合的数量 .setTicker("测试通知来啦") //通知首次出现在通知栏,带上升动画效果的 .setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间 .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级 // .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消 .setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接) .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合 //Notification.DEFAULT_ALL Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission .setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON 第一步:获取状态通知栏管理:[java]view plaincopy NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 第二步:实例化通知栏构造器NotificationCompat.Builder:[java]view plaincopy NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 第三步:对Builder进行配置: mBuilder.setContentTitle("测试标题")//设置通知栏标题 .setContentText("测试内容") /<span style="font-family: Arial;">/设置通知栏显示内容</span> .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //设置通知栏点击意图 // .setNumber(number) //设置通知集合的数量 .setTicker("测试通知来啦") //通知首次出现在通知栏,带上升动画效果的 .setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间 .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级 // .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消 .setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接) .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合 //Notification.DEFAULT_ALL Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission .setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON 详细代码:/** * 带按钮的通知栏 */ public void showButtonNotify(){ NotificationCompat.Builder mBuilder = new Builder(this); RemoteViews mRemoteViews = new RemoteViews(getPackageName(), R.layout.view_custom_button); mRemoteViews.setImageViewResource(R.id.custom_song_icon, R.drawable.sing_icon); //API3.0 以上的时候显示按钮,否则消失 mRemoteViews.setTextViewText(R.id.tv_custom_song_singer, "周杰伦"); mRemoteViews.setTextViewText(R.id.tv_custom_song_name, "七里香"); //如果版本号低于(3。0),那么不显示按钮 if(BaseTools.getSystemVersion() <= 9){ mRemoteViews.setViewVisibility(R.id.ll_custom_button, View.GONE); }else{ mRemoteViews.setViewVisibility(R.id.ll_custom_button, View.VISIBLE); } // if(isPlay){ mRemoteViews.setImageViewResource(R.id.btn_custom_play, R.drawable.btn_pause); }else{ mRemoteViews.setImageViewResource(R.id.btn_custom_play, R.drawable.btn_play); } //点击的事件处理 Intent buttonIntent = new Intent(ACTION_BUTTON); /* 上一首按钮 */ buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PREV_ID); //这里加了广播,所及INTENT的必须用getBroadcast方法 PendingIntent intent_prev = PendingIntent.getBroadcast(this, 1, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_prev, intent_prev); /* 播放/暂停 按钮 */ buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PALY_ID); PendingIntent intent_paly = PendingIntent.getBroadcast(this, 2, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_play, intent_paly); /* 下一首 按钮 */ buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_NEXT_ID); PendingIntent intent_next = PendingIntent.getBroadcast(this, 3, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_next, intent_next); mBuilder.setContent(mRemoteViews) .setContentIntent(getDefalutIntent(Notification.FLAG_ONGOING_EVENT)) .setWhen(System.currentTimeMillis())// 通知产生的时间,会在通知信息里显示 .setTicker("正在播放") .setPriority(Notification.PRIORITY_DEFAULT)// 设置该通知优先级 .setOngoing(true) .setSmallIcon(R.drawable.sing_icon); Notification notify = mBuilder.build(); notify.flags = Notification.FLAG_ONGOING_EVENT; mNotificationManager.notify(notifyId, notify); }
相关文章推荐
- Android 使用AlarmManager和NotificationManager来实现闹钟和通知栏
- Android闹钟 AlarmManager的使用
- Android闹钟 AlarmManager的使用
- (4.1.32.1)Android闹钟 AlarmManager的使用
- Android编程使用AlarmManager设置闹钟的方法
- Android闹钟 AlarmManager的使用
- Android闹钟 AlarmManager的使用
- Android 利用AlarmManager和NotificationManager来实现闹钟和通知栏
- Android闹钟 AlarmManager的使用【转】
- Android闹钟 AlarmManager的使用
- Android闹钟 AlarmManager的使用
- Android闹钟AlarmManager-通知NotificationManager-自定义通知栏
- Android AlarmManager(闹钟、Notification 通知栏)
- android闹钟AlarmManager的使用
- Android 使用AlarmManager设置闹钟
- androidTV定时播放(闹钟)的使用--AlarmManager
- Android闹钟 AlarmManager的使用
- Android闹钟 AlarmManager的使用
- Android闹钟 AlarmManager的使用
- android开发步步为营之18:闹钟AlarmManager的使用