来电时如何改变来电振动等级?

时间:2014-11-07 15:47:19

标签: android android-vibration incoming-call

某种棘手的问题。我正在使用一个应用程序,通过该应用程序,用户可以为不同的联系人设置来电自定义铃声和不同的振动级别。

我一直坚持振动水平设定。我们可以使用

设置振动水平
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);

这就是振动我的手机。但我想设置来电的振动水平。用户可以根据不同的预定义振动设置进行设置。

使用此代码我可以设置Vibration ON - OFF。但不知道如何设定振动水平。

 String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent";
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1);

我希望有人可以就这个问题提出一些建议。欢迎提出建议。

2 个答案:

答案 0 :(得分:0)

Android Vibrate API只有时间控制。该API没有数量控制。

有关详情,请参阅this

http://developer.android.com/reference/android/os/Vibrator.html

答案 1 :(得分:0)

如果你想降低振动,你需要在中间创建一个带空白空间的模式。

使用如下的常量:

int dot = 200;      
int short_gap = 200;    // Length of Gap 

然后定义数组和模式:

long[] pattern = {
    0,  // Start immediately
    dot, short_gap };

然后你可以打电话:

v.vibrate(pattern, x);

// x value:
// 0 repeat infinite
// -1 no repeat
// n number of repetitions

通过改变点和间隙的长度(或定义新的点以执行各种模式),您可以调制振动的力量。

EDIT1:这是我的VibrationConstants.java

public class VibrationConstants {                         

    private static int p = 5; // five millisecond of vibration
    private static int s = 5; // five millisecond of break - could be more to
                  // weaken
                  // the vibration
    private static int pp = 10; // ten millisecond of vibration
    private static int ss = 10; // ten millisecond of break - could be more to
                // weaken
                // the vibration
    private static int ppp = 50; // fifty millisecond of vibration
    private static int sss = 50; // fifty millisecond of break - could be more to
                 // weaken
                 // the vibration

    public static long[] HARD_VIBRATION = { 0, ppp, sss };
    public static long[] MIDDLE_VIBRATION = { 0, pp, ss };
    public static long[] SOFT_VIBRATION_2 = { 0, p, s };

    public static long[] PATTERN_VIBRATION = { 0, 250, 200, 250, 150, 150, 75,
        150, 75, 150 }; 
}

所以,当你想打电话时:

v.vibrate(VibrationConstants.SOFT_VIBRATION_2, x);

// x value:
// 0 repeat infinite
// -1 no repeat
// n number of repetitions

如果振动和休息中具有相同值的结果不符合您的预期,请尝试仅更改中断值。这样做效果很好。 :)

希望有所帮助,我试图从谷歌三星或Xperia这样的手机品牌中找到模式,但我找不到它......所以我们用模拟的模式得到了很好的结果,但都取决于你的要求。

我相信你必须做一些测试来达到你的目标,但不是那么难。