2

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

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

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);

这就是振动我的手机的方法。但我想设置来电的振动级别。用户可以从不同的预定义振动设置中进行设置。

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

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

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

4

2 回答 2

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 等手机品牌中找到模式,但我找不到它......所以我们用这些模式模拟了很好的结果,但这一切都取决于你的要求。

我相信你必须做一些测试才能达到你的目标,但并不难。

于 2014-11-08T16:19:22.087 回答
0

Android Vibrate API 只有时间控制。该 API 中没有幅度控制。

有关更多信息,请参阅

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

于 2014-11-07T18:13:29.973 回答