接收呼叫时模拟振动

时间:2010-02-19 09:46:31

标签: android vibrate

所以我试图模拟手机正在接听电话。我已经成功提取了手机铃声并播放了它。现在我想模拟振动。虽然我可以让手机振动,但我想模仿手机振动的确切模式,就像它接到电话一样。是否有一些设置或类可用于提取此模式,还可以检测振动是否已打开?

3 个答案:

答案 0 :(得分:4)

你必须以一种模式振动它。

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);  

// 1. Vibrate for 1000 milliseconds  
long milliseconds = 1000;  
v.vibrate(milliseconds);  

// 2. Vibrate in a Pattern with 500ms on, 500ms off for 5 times  
long[] pattern = { 500, 300 };  
v.vibrate(pattern, 5);

http://www.androidsnippets.org/snippets/22/

我不确定使用哪种模式作为标准,你可以在源代码中找到它,或者自己继续尝试不同的模式,直到它满意为止。

答案 1 :(得分:0)

为什么不使用Android源代码来了解他们是如何做到的?

手机应用来源可从以下网站获得 https://android.googlesource.com/platform/packages/apps/Phone

答案 2 :(得分:0)

似乎没有可以为您提供来电“标准”振动设置的课程。 由于大多数电话都带有自定义供应商呼叫者应用程序,并且Google Play上有很多自定义呼叫者应用程序,因此这种“标准”模式甚至可能不存在。

AOSP的标准呼叫者应用程序使用以下模式:

private static final int VIBRATE_LENGTH = 1000; // ms
private static final int PAUSE_LENGTH = 1000; // ms

并检测是否打开了振动:

boolean shouldVibrate() {
    AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
    int ringerMode = audioManager.getRingerMode();
    if (Settings.System.getInt(mContext.getContentResolver(), "vibrate_when_ringing", 0) > 0) {
        return ringerMode != AudioManager.RINGER_MODE_SILENT;
    } else {
        return ringerMode == AudioManager.RINGER_MODE_VIBRATE;
    }
}

这取决于在标准手机设置中可以找到的“振铃时振动”和“声音模式”设置。