Andorid 调用系统震动

  1. 前言:
    项目中有时我们需要调用手机的系统震动功能,最近做的项目中有用到。以下是我所用的方法:
    权限:
 <uses-permission android:name="android.permission.VIBRATE" />
        /**
     * 初始化震动
     *
     * @param context
     */
    public static void initViarbtor(Context context) {
        if (context == null) return;
        vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        context.getApplicationContext().registerReceiver(mIntentReceiver, filter);
        vibrator.vibrate(new long[]{300, 100, 100, 1000}, 0);    //等待3s,震动0.1s,等待0.1s,震动 1S;0表示一直震动

    }

初始化震动后,我们还有写一个方法用来停止震动:

 /**
     *停止震动
     *
     * @param context
     */
    public static void stopViarbtor(Context context) {
        if (vibrator!=null)
        vibrator.cancel();
        vibrator=null;

    }

到此我们简单的调用系统的震动跟停止震动就已经结束了,但有些产品思想跟人的思想就是不一样,有的黑屏之后,或者按下电源键,震动依然还在。如过只是用以上方法这个需要是满足不了,原因:
安卓是起服务实现震动的,如下:
mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

持续震动可以通过public abstract void vibrate(long[] pattern, int repeat);设置repeat参数来实现
repeat为-1表示不重复, 如果不是-1, 比如改成1, 表示从前面这个long数组的下标为1的元素开始重复.
mVibrator.vibrate(new long[]{100,100,100,1000}, 0);//持续震动
熄屏后发现震动停止了,原因是VibratorService.java中注册了一个屏保事件的广播接收者,进入ACTION_SCREEN_OFF屏保时,会调用doCancelVibrateLocked,继而调用doVibratorOff停掉振动**

所以在我们自己的模块。需要动态建立一个类似的广播进行处理,以确保持续震动还是停止。为此我们还要有一下操作:

   static BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                synchronized (vibrator)
                {
                    vibrator.cancel();
                    Log.e("MelodyTest", "hongyan:has no vibrator");
                    vibrator.vibrate(new long[]{300, 100, 100, 1000}, 0);    //等待3s,震动0.1s,等待0.1s,震动 1S;0表示一直震动
                }
            }
        }
    };
}

经过以上操作我们得任务就完成了,不妨可以试一下。这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]中的代码,可以看出在boot_mode.c文件中的normal_mode函数中,设置了开机震动的代码。具体来说,通过调用vibrator_hw_init()函数进行开机震动的初始化,然后调用set_vibrator(1)函数来设置震动。所以,根据代码来看,Android开机应该是有震动的。 另外,根据引用\[2\]和引用\[3\]中的代码,可以看出在platform.c文件中的mboot_common_load_logo方法显示开机Logo之前也添加了震动的代码。具体来说,通过调用vibr_Enable_HW()函数开启震动,然后通过mdelay(80)函数进行80毫秒的震动,最后通过vibr_Disable_HW()函数关闭震动。所以,从代码来看,Android开机时应该会有震动。 综上所述,根据提供的代码来看,Android开机应该是有震动的。如果您的设备没有震动,可能是由于其他原因导致的问题。建议您检查设备的设置和硬件是否正常工作。 #### 引用[.reference_title] - *1* *2* [Android 开机Logo、铃声、震动修改方案](https://blog.csdn.net/wjky2014/article/details/100942678)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android 开机震动、动画、铃声添加方案](https://blog.csdn.net/wjky2014/article/details/89235853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值