您的位置:首页 > 移动开发 > Android开发

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