Android Vibration API

时间:2013-12-09 07:05:28

标签: android android-audiomanager vibration

我正在尝试使用声音管理器应用程序为“RING,NOTIFICATION,MEDIA,SYSTEM”创建不同的声音配置文件。

根据设置音量级别,我使用

成功完成了它
AudioManager setStreamVolume(AudioManager.STREAM_RING, <value>);

振动设置带来了挑战。

目前api致电:

AudioManager setVibrateSetting(vibrateType, vibrateSetting);

在API级别16中已弃用,并且没有希望使用它..

其他选择是使用

AudioManager setRingerMode(AudioManager.RINGER_MODE_NORMAL);

但我正准备关闭并打开振动

  • RINGER
  • 通知

来自我的自定义应用程序。或者随时打开其中一个。

您可以认为我正在执行类似于操作系统设置选项中声音设置中启用和禁用振动的操作。

任何帮助?

2 个答案:

答案 0 :(得分:0)

试试这个:

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);

答案 1 :(得分:-1)

首先,您需要在Manifest文件中定义

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

在你的类文件中使用这样的东西。想知道你需要把它放在哪里。

// You need to define some sort of pattern for this
    Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    long[] pattern = {0, 1000, 0};
    //long[] pattern = {startTime, TotalTimeDuration, not vibrating for 0ms}; .. Example for above stuff
    vb.vibrate(pattern, 0);

例如:

button.setOnTouchListener(new OnTouchListener() {
    Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                long[] pattern = {0, 1000, 0};
                vb.vibrate(pattern, 0);
                break;
            case MotionEvent.ACTION_UP:
                vb.cancel();
                break;
        }
        return false;
    }
});