Android Vibrator 振动器

Vibrator (震动器),就是手机静音时的那种震动,是 Android 给我们提供的用于机身震动的一个服务

比如可以在我们的 Notification 中可以设置震动,当收到推送消息的时候我们可以设置震动 提醒,游戏必备,比如"打飞机"的游戏,当你的飞机给人打爆的时候,会长震动

添加权限

使用振动器需要在 AndroidManifest.xml 中添加下述权限

<uses-permission android:name="android.permission.VIBRATE />

振动器 (Vibrator) 的一般使用流程

  1. 获得 Vibrator 实例

    Vibrator vb = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
    
  2. 调用方法 vb.hasVibrator() 判断是否有振动器

  3. 可以调用方法 vb.hasAmplitudeControl() 判断是否可以设置振幅大小

  4. 调用以下方法之一设置振动器相关属性并开始震动

    方法 说明
    vibrate(long milliseconds, int amplitude) 创建一次性振动
    vibrate(long[] timings, int[] amplitudes, int repeat) 创建波形振动
    vibrate(long[] timings, int repeat) 创建波形振动

    参数说明

    参数 说明
    milliseconds 震动的时常,单位为毫秒
    amplitude 震动的强度
    timings 指定手机以 timings 指定的模式振动,比如 timingsnew int[200,400,600,800],就是让它在200,400,600,800 这个时间交替启动与关闭振动器
    repeat 是否重复震动,如果是 -1 的只振动一次,如果是 0 的话则一直振动

    其实 vibrate 的方法原型是这样的

    vibrate(VibrationEffect vibe)
    vibrate(VibrationEffect vibe, AudioAttributes attributes)
    
    参数 说明
    vibe 震动的效果,比如震动时常,震动幅度,是否重复
    attributes 音频属性

    因为 VibrationEffect 是一个生成器,所以可以使用上面的方法

  5. 用完后可以调用 vb.cancel() 取消震动

VibrationEffect 类

VibrationEffect 是用来描述振动器各种参数的类,包括震动时常,震动幅度,是否重复

VibrationEffect 是一个生成器,也就是我们调用 vibrate() 传递的任何参数,它都会去匹配以下静态方法之一去生成一个 VibrationEffect

方法 说明
createOneShot(long milliseconds, int amplitude) 创建一次性振动
createWaveform(long[] timings, int[] amplitudes, int repeat) 创建波形振动
createWaveform(long[] timings, int repeat) 创建波形振动

参数说明

参数 说明
milliseconds 震动的时常,单位为毫秒
amplitude 震动的强度
timings 指定手机以 timings 指定的模式振动,比如 timingsnew int[200,400,600,800],就是让它在200,400,600,800 这个时间交替启动与关闭振动器
repeat 是否重复震动,如果是 -1 的只振动一次,如果是 0 的话则一直振动

范例:设置频率不同的震动器

我们先来看最后的演示效果


  1. 创建一个 空的 Android 项目 cn.twle.android.Vibrator

  2. 修改 activity_main.xml 添加五个按钮

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn_hasVibrator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="判断是否有振动器" />
    
        <Button
            android:id="@+id/btn_short"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="短振动" />
    
        <Button
            android:id="@+id/btn_long"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="长振动" />
    
        <Button
            android:id="@+id/btn_rhythm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="节奏振动" />
    
        <Button
            android:id="@+id/btn_cancle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="取消振动" />
    </LinearLayout>
    
  3. 修改 AndroidManifest.xml 添加震动器权限

    <uses-permission android:name="android.permission.VIBRATE"/>
    
  4. 修改 MainActivity.java 实现逻辑

    package cn.twle.android.vibrator;

    import android.app.Service; import android.content.Context; import android.os.Vibrator; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button btn_hasVibrator;
        private Button btn_short;
        private Button btn_long;
        private Button btn_rhythm;
        private Button btn_cancle;
        private Vibrator myVibrator;
        private Context mContext;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获得系统的Vibrator实例:
            myVibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
            mContext = MainActivity.this;
            bindViews();
        }
    
        private void bindViews() {
            btn_hasVibrator = (Button) findViewById(R.id.btn_hasVibrator);
            btn_short = (Button) findViewById(R.id.btn_short);
            btn_long = (Button) findViewById(R.id.btn_long);
            btn_rhythm = (Button) findViewById(R.id.btn_rhythm);
            btn_cancle = (Button) findViewById(R.id.btn_cancle);
    
            btn_hasVibrator.setOnClickListener(this);
            btn_short.setOnClickListener(this);
            btn_long.setOnClickListener(this);
            btn_rhythm.setOnClickListener(this);
            btn_cancle.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_hasVibrator:
                    Toast.makeText(mContext, myVibrator.hasVibrator() ? "当前设备有振动器" : "当前设备无振动器",
                            Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_short:
                    myVibrator.cancel();
                    myVibrator.vibrate(new long[]{100, 200, 100, 200}, 0);
                    Toast.makeText(mContext, "短振动", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_long:
                    myVibrator.cancel();
                    myVibrator.vibrate(new long[]{100, 100, 100, 1000}, 0);
                    Toast.makeText(mContext, "长振动", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_rhythm:
                    myVibrator.cancel();
                    myVibrator.vibrate(new long[]{500, 100, 500, 100, 500, 100}, 0);
                    Toast.makeText(mContext, "节奏振动", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_cancle:
                    myVibrator.cancel();
                    Toast.makeText(mContext, "取消振动", Toast.LENGTH_SHORT).show();
            }
        }
    }
    

参考文档

  1. Android Vibrator

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.