android手机震动、提示音、播放系统音乐和研究7.0,6.0弹出Notification出现crash问题

一、android手机震动实现方式:

    /**
     * 。两个Vibrate函数的参数简单介绍如下:
     * <p>
     * final Activity activity  :调用该方法的Activity实例
     * <p>
     * long milliseconds :震动的时长,单位是毫秒
     * <p>
     * <p>
     * long[] pattern  :自定义震动模式 。数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长。。。]
     * 时长的单位是毫秒
     * <p>
     * <p>
     * boolean isRepeat : 是否反复震动,如果是true,反复震动,如果是false,只震动一次
     *
     * @param activity
     * @param milliseconds
     */
    public static void Vibrate(final Activity activity, long milliseconds) {
        Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE);
        vib.vibrate(milliseconds);
    }

    public static void Vibrate(final Activity activity, long[] pattern, boolean isRepeat) {
        vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE);
        vib.vibrate(pattern, isRepeat ? 1 : -1);

    }

    /**
     * 震动取消
     */
    public static void VibrateCancel() {
        if (vib.hasVibrator()) {
            vib.cancel();
        }

    }

在这里我使用的是循环震动的方式:

  long[] pattern = new long[]{2000, 3000, 2000, 3000, 2000, 3000, 2000, 3000, 2000, 3000, 2000, 3000, 2000, 3000, 2000, 3000, 2000, 3000};

  TipHelper.Vibrate(mActivity, pattern, false);

二、在android之前在项目中如果给用户一个提示音一般我们直接使用Notification即可:

    // 播放提示音短(6.0以上不能使用)
    // 返回Notification id
    @TargetApi(Build.VERSION_CODES.M)
    public static void PlaySound(final Context context) {
        NotificationManager mgr = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Notification nt = new Notification();
        nt.defaults = Notification.DEFAULT_SOUND;
        int soundId = new Random(System.currentTimeMillis())
                .nextInt(Integer.MAX_VALUE);
            mgr.notify(soundId, nt);

    }

但是发现6.0以上不能用了,如下图:

这里写图片描述

说是没有小图标,我又不显示通知,如果加了小图标手机会显示通知栏的。
那到底为什么呢?

既然报的是mgr.notify(soundId, nt);那么就来看看notify方法,

这里写图片描述

/**
         * Lollipop with an extra sugar coating on the outside!
         */
        public static final int LOLLIPOP_MR1 = 22;

只要是版本大于22直接抛出异常,因此在6.0以后这个方法没用了!

三、播放系统音乐:

上面的提示音没了,我们可以进行播放系统音乐的方式来提醒用户

   //播放默认铃声
    public static void startAlarm(Context mContext) {

        Uri mediaUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        mMediaPlayer = MediaPlayer.create(mContext,
                mediaUri);
        mMediaPlayer.setLooping(false);
        mMediaPlayer.start();

    }

    //停止默认铃声
    public static void stopAlarm() {
        if (mMediaPlayer != null)
            mMediaPlayer.stop();

    }

四、当然也可以使用SoundPool的方式播放自定义声音

详细请看:http://blog.csdn.net/huangxiaoguo1/article/details/53783023

好了,有什么好的方式,敬请指教,谢谢….

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值