以编程方式启用/禁用键盘声音和振动

我试图find一种方法来禁用和启用键盘声音和振动时,敲击键。 我已经search堆栈溢出和其他Android论坛,但我没有find任何结果。

我试过AudioManager来启用振动模式,但我想激活键盘上的振动模式和声音。

 audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON); 

有没有办法如何更改键盘声音和振动android.provider.Settings

Solutions Collecting From Web of "以编程方式启用/禁用键盘声音和振动"

根据您的意见:

我正在谈论Android中的默认键盘,我想要有能力禁用/启用键盘声音和振动,当用户点击键盘上的一个键,(如在键盘设置)

我正在谈论软键盘,就像三星GALAXY S2,HTC ONE等一样

AFAIK,你不能做到这一点,因为每个input法在内部保持其声音/振动偏好值。 请参阅Android(AOSP)IMe (截至本书的第30〜39行):

  <CheckBoxPreference android:key="vibrate_on" android:title="@string/vibrate_on_keypress" android:defaultValue="@bool/config_default_vibration_enabled" android:persistent="true" /> <CheckBoxPreference android:key="sound_on" android:title="@string/sound_on_keypress" android:defaultValue="@bool/config_default_sound_enabled" android:persistent="true" /> 

正如您所看到的,它将振动/声音值存储在其共享首选项中。 这适用于市场上大多数IMe。 因此,您无法从单点控制所有IMe的振动/声音效果。

看看如何禁用所有我的应用程序或活动的默认声音效果禁用轻敲声音。

要禁用触觉反馈和触摸的声音编程有看看http://developer.android.com/reference/android/view/View.html#setHapticFeedbackEnabled(boolean)http://developer.android.com/reference/android/视图/ View.html#setSoundEffectsEnabled(布尔值)

更简单的做法是在styles.xml中定义以下内容

 <!-- Application theme. --> <style name="AppTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen"> <item name="android:soundEffectsEnabled">false</item> <item name="android:hapticFeedbackEnabled">false</item> </style> 

和你的manifest.xml中

 <application [...] android:theme="@style/AppTheme" > 

是的,如果你有root权限,你可以这样做。 它是一个漫长的过程,但你可以做到这一点:

步骤:1创build名为com.android.inputmethod.latin_preferences.xml xml文件并保存到资产中。

com.android.inputmethod.latin_preferences.xml

 <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="popup_on" value="false" /> <string name="auto_correction_threshold">1</string> <boolean name="pref_enable_metrics_logging" value="true" /> <boolean name="pref_voice_input_key" value="true" /> <boolean name="pref_key_use_personalized_dicts" value="true" /> <boolean name="pref_key_block_potentially_offensive" value="true" /> <int name="last_shown_emoji_category_id" value="1" /> <boolean name="sound_on" value="false" /> <string name="emoji_recent_keys">[{&quot;Integer&quot;:128533}]</string> <boolean name="auto_cap" value="true" /> <boolean name="show_suggestions" value="true" /> <boolean name="pref_key_use_contacts_dict" value="true" /> <boolean name="next_word_prediction" value="true" /> <boolean name="pref_key_use_double_space_period" value="true" /> <int name="emoji_category_last_typed_id1" value="0" /> <boolean name="vibrate_on" value="false" /> </map> 

第2步:使用您需要的asset manager将此文件复制到您的应用程序文件夹(您可以访问的任何地方)

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

此function将从资产复制文件

 public static void copyAssets(Context context, String assetPath, String outFilename) { AssetManager assetManager = context.getAssets(); InputStream in = null; OutputStream out = null; try { in = assetManager.open(assetPath); File outFile = new File(context.getExternalFilesDir(null), outFilename); out = new FileOutputStream(outFile); copyFile(in, out); } catch (IOException e) { Log.e(TAG, "Failed to copy asset: " + outFilename, e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { } } if (out != null) { try { out.close(); } catch (IOException e) { } } } } public static void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } 

第三步:覆盖系统首选文件系统path(destPath)是/data/data/com.android.inputmethod.latin/shared_prefs

 public static void copyToSystem(final String sourceFilePath, final String destPath) { Thread background = new Thread(new Runnable() { @Override public void run() { try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); // os.writeBytes("cp -f " + sourceFilePath + " " + destPath + "\n"); os.flush(); os.writeBytes("exit\n"); os.flush(); process.waitFor(); process.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); Log.e(TAG, e.toString()); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, e.toString()); } } }); background.start(); } 

第4步:重新启动设备

这一切都完成了。 这些步骤将closures按键声音和按键振动