所以我试图模拟手机正在接听电话。我已经成功提取了手机铃声并播放了它。现在我想模拟振动。虽然我可以让手机振动,但我想模仿手机振动的确切模式,就像它接到电话一样。是否有一些设置或类可用于提取此模式,还可以检测振动是否已打开?
答案 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;
}
}
这取决于在标准手机设置中可以找到的“振铃时振动”和“声音模式”设置。