Enabling and disabling vibration in android programmatically

前端 未结 4 1657
攒了一身酷
攒了一身酷 2020-12-10 15:52

In one of my android apps, I need to enable or disable the vibration completely irrespective of the mode (i.e. silent or general or loud).

I am currently using the f

相关标签:
4条回答
  • 2020-12-10 15:59

    The deprecation text for setVibrateSetting() says:

    This method should only be used by applications that replace the platform-wide management of audio settings or the main telephony application.

    From what I understand, there is no other option to globally enable or disable vibration, so if you have an app such as a ring profile manager, you probably need to use it.

    IMHO, Google used deprecation here inappropriately.

    I use the following class to hide the deprecation in one "compat" class:

    @SuppressWarnings("deprecation")
    class AudioManagerCompat {
        final static int VIBRATE_TYPE_RINGER = AudioManager.VIBRATE_TYPE_RINGER;
        final static int VIBRATE_TYPE_NOTIFICATION = AudioManager.VIBRATE_TYPE_NOTIFICATION;
        final static int VIBRATE_SETTING_ON = AudioManager.VIBRATE_SETTING_ON;
        final static int VIBRATE_SETTING_OFF = AudioManager.VIBRATE_SETTING_OFF;
        final static int VIBRATE_SETTING_ONLY_SILENT = AudioManager.VIBRATE_SETTING_ONLY_SILENT;
    
        static int getVibrateSetting(AudioManager am, int vibrateType) {
            return am.getVibrateSetting(vibrateType);
        }
    
        static void setVibrateSetting(AudioManager am, int vibrateType, int vibrateSetting) {
            am.setVibrateSetting(vibrateType, vibrateSetting);
        }
    }
    
    0 讨论(0)
  • 2020-12-10 16:12

    Check this, i found that as the first google result. The code:

    if(isVibrate){
    Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);  
         vib.vibrate(500);
          Toast.makeText(this, "vib started", Toast.LENGTH_LONG).show();
    }
    
    else{
    
    // do nothing
    
    }
    
    0 讨论(0)
  • 2020-12-10 16:19

    Here is my code

    switch (position) {
        case 0:
            audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            break;
        case 1:
            audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
            break;
        case 2:
            audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
                    AudioManager.VIBRATE_SETTING_OFF);
            break;
        case 3:
            audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
                    AudioManager.VIBRATE_SETTING_ON);
            break;
        }
    

    setVibrateSetting works fine when I use my nexus s with Gingerbread and IceCreamSandwich, I develop it with ICS, however recently I found it doesn't work with Jelly Bean, and getVibrateSetting also doesn't work. Waiting for a better way~

    0 讨论(0)
  • 2020-12-10 16:23

    You can use the following code lines:

    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    
    vibration.cancel();
    
    0 讨论(0)
提交回复
热议问题