当前位置: 首页 > 知识库问答 >
问题:

如何让一个Android设备震动?用不同的频率?

柳均
2023-03-14

我写了一个Android应用程序。现在,我想让设备在某个动作发生时振动。我怎么能这么做?

共有2个答案

张宝
2023-03-14

在您开始实现任何振动代码之前,您必须给予您的应用程序振动的权限:

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

确保在您的AndroidManifest.xml文件中包含这一行。

大多数IDE都会为您执行此操作,但如果您的IDE不执行此操作,下面是import语句:

 import android.os.Vibrator;

在你希望振动发生的activity上确保这一点。

在大多数情况下,您将希望振动设备一个短的,预定的时间量。您可以通过使用震动(长毫秒)方法来实现这一点。下面是一个简单的示例:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Vibrate for 400 milliseconds
v.vibrate(400);

就是这样,简单!

可能是这样的情况,你希望设备无限期地继续振动。为此,我们使用vibrate(Long[]pattern,int repeat)方法:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Vibrate for 100 milliseconds
// Sleep for 1000 milliseconds
long[] pattern = {0, 100, 1000};

// The '0' here means to repeat indefinitely
// '0' is actually the index at which the pattern keeps repeating from (the start)
// To repeat the pattern from any other point, you could increase the index, e.g. '1'
v.vibrate(pattern, 0);

当您准备好停止振动时,只需调用cancel()方法:

v.cancel();

如果你想要一个更定制的振动,你可以尝试创建你自己的振动模式

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Each element then alternates between vibrate, sleep, vibrate, sleep...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};

// The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array
v.vibrate(pattern, -1);

有多个SDK提供更全面的触觉反馈。我使用的特效是Immersion的Android触觉开发平台。

如果你的设备不会振动,首先要确保它能振动:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
    Log.v("Can Vibrate", "YES");
} else {
    Log.v("Can Vibrate", "NO");
}

其次,请确保您已经给了应用程序振动的权限!回到第一点。

段弘和
2023-03-14

尝试:

import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
    //deprecated in API 26 
    v.vibrate(500);
}

注:

不要忘记在AndroidManifest.xml文件中包含权限:

<uses-permission android:name="android.permission.VIBRATE"/>
 类似资料:
  • 现在,我想让设备在屏幕上显示结果时振动 MainActivity.java的某些部分 我怎么能这么做? 谢了!

  • 可以通过蓝牙传输音频吗?在我的研究中,我发现只有使用A2DP(高级音频分布配置文件)才有可能。每个Android设备都支持A2DP吗?如果没有,是否可以使用蓝牙在两个Android设备之间传输音频?请帮我理解这一点。 我浏览了以下链接: 在Android中通过蓝牙接收音频, 谷歌确认蓝牙音频流修复下一个版本的Android 4.2 如何通过蓝牙从另一台设备流式传输音频?

  • 例如,我有两个心率监视器与我的平板电脑配对。我正在使用这样的代码来获取HRM设备列表: 然后,我在GUI中显示一个列表框,其中包含从设备[I]获取的设备名称。名称例如,我选择索引为0的设备。然后我可以访问it人力资源服务和人力资源管理特征: 除了心率,我还需要电池状态。如何访问同一(已选择)设备的电池服务?

  • 问题内容: 我写了一个Android应用程序。现在,我想使设备在发生某种动作时振动。我怎样才能做到这一点? 问题答案: 尝试: 注意: 不要忘记在文件中包含权限:

  • 目前我正在使用spring、struts2、mybatis和mysql。 一个用户可以管理多个办公室,例如,管理纽约办公室和伦敦办公室,并且不同办公室的权限不同,因此该用户必须创建多个帐户,如果他/她想每天处理不同办公室的预订,则必须在多个帐户之间登录/注销。 有用户、权限、用户角色和角色权限表。 现在我尝试让一个用户只需要一个帐户,然后他/她可以切换到具有不同权限(菜单权限和按钮权限)的不同办公

  • 在android中是否有区分不同类型的音频设备?例如,我从不同的制造商获得了音频设备类型A和音频设备类型B,这两种设备都使用音频插孔。每当用户插入音频设备类型A或类型B时,我想知道设备ID或名称、类型。我可以使用BroadcastRecencer检测音频设备的插入/输出。但无法获取设备ID或名称或类型。场景是:当音频设备类型A连接时,开启服务A,当音频设备类型B连接时,开启服务B。