Android Vibrator 振动器
Vibrator
(震动器),就是手机静音时的那种震动,是 Android
给我们提供的用于机身震动的一个服务
比如可以在我们的 Notification
中可以设置震动,当收到推送消息的时候我们可以设置震动
提醒,游戏必备,比如"打飞机"的游戏,当你的飞机给人打爆的时候,会长震动
添加权限
使用振动器需要在 AndroidManifest.xml
中添加下述权限
<uses-permission android:name="android.permission.VIBRATE />
振动器 (Vibrator) 的一般使用流程
-
获得
Vibrator
实例Vibrator vb = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
-
调用方法
vb.hasVibrator()
判断是否有振动器 -
可以调用方法
vb.hasAmplitudeControl()
判断是否可以设置振幅大小 -
调用以下方法之一设置振动器相关属性并开始震动
方法 说明 vibrate(long milliseconds, int amplitude) 创建一次性振动 vibrate(long[] timings, int[] amplitudes, int repeat) 创建波形振动 vibrate(long[] timings, int repeat) 创建波形振动 参数说明
参数 说明 milliseconds 震动的时常,单位为毫秒 amplitude 震动的强度 timings 指定手机以 timings 指定的模式振动,比如 timings
为new int[200,400,600,800]
,就是让它在200,400,600,800 这个时间交替启动与关闭振动器repeat 是否重复震动,如果是 -1 的只振动一次,如果是 0 的话则一直振动 其实
vibrate
的方法原型是这样的vibrate(VibrationEffect vibe) vibrate(VibrationEffect vibe, AudioAttributes attributes)
参数 说明 vibe 震动的效果,比如震动时常,震动幅度,是否重复 attributes 音频属性 因为
VibrationEffect
是一个生成器,所以可以使用上面的方法 -
用完后可以调用
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 指定的模式振动,比如 timings 为 new int[200,400,600,800] ,就是让它在200,400,600,800 这个时间交替启动与关闭振动器 |
repeat | 是否重复震动,如果是 -1 的只振动一次,如果是 0 的话则一直振动 |
范例:设置频率不同的震动器
我们先来看最后的演示效果
-
创建一个 空的 Android 项目
cn.twle.android.Vibrator
-
修改
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>
-
修改
AndroidManifest.xml
添加震动器权限<uses-permission android:name="android.permission.VIBRATE"/>
-
修改
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(); } } }