智能手机在API 16之前不会振动

时间:2013-04-21 10:29:39

标签: android vibrate

我有点问题。

我的应用程序必须在按下按钮时振动,所有工作在我的Samsung S3(API 17)中正常工作,但在我的S2(API 15)上这不起作用。

代码:

   <uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.VIBRATE"/>

主要

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    Vibrator x = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    x.cancel();
    backgroundVibrate = 0;
    //final ToggleButton toggle = (ToggleButton)findViewById(R.id.toggleButton1);
    setContentView(R.layout.activity_fullscreen);

    Button fast1 = (Button) findViewById(R.id.fast1);
    fast1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            long[] pattern = { 0, 100, 300 };
            vibrate(pattern, false);
        }
    });
   public void vibrate(long[] pattern, boolean stop)
{
    // Get instance of Vibrator from current Context
    Vibrator x = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    if (stop == false)
    {
        x.vibrate(pattern, 0);
        currentVibrate = true;
        System.out.println("vibrate ON");
    }
    if (stop == true)
    {
        x.cancel();
        currentVibrate = false;
    }

}

有人有想法吗?

感谢

3 个答案:

答案 0 :(得分:0)

那些振动持续时间真的很短。作为一个测试,我建议你在每个结尾处加上一个零,看看振动是否真的可以解决代码运行正常的问题。

然后,我想你必须设置一个在所有硬件上都可以接受的持续时间(因为不同的硬件会有不同的灵敏度,因为想要更好的词)。

答案 1 :(得分:0)

完成这项工作的简单方法是使用Haptic Feedback

Button fast1 = (Button) findViewById(R.id.fast1);
fast1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
    }
});

这方面的好处是你不需要在AndroidManifest中设置权限。 请注意,您需要启用触觉反馈作为全局。从http://developer.android.com/reference/android/view/HapticFeedbackConstants.html查看。

您只需使用以下代码为您的应用启用触觉反馈即可。

Settings.System.putInt(getContentResolver(), Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);

不要忘记在AndroidManifest.xml中添加以下权限

<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>

答案 2 :(得分:0)

我最初的解决方案一切都很好。

问题来自三星S2设置....

感谢您的帮助