2013-05-06 8 views
8

キーをタップするとキーボードの音と振動を無効にして有効にする方法を見つけようとしています。私はをスタックオーバーフローで検索しましたと他Androidフォーラムが見つかりませんでした。キーボードの音と振動をプログラムで有効/無効にする

私はAudioManagerを使って振動モードを有効にしようとしましたが、キーボードの振動モードとサウンドを有効にします。

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

android.provider.Settingsキーボードの音や振動を変更する方法はありますか?

+0

任意の??????! – Houcine

+0

これは本当にキーボードの実装に依存していると思います。キーがタップされるたびに映画を再生するキーボードがあります。私はあなたがこれを達成できるとは思わない。とにかく、良い。 –

+0

あなたの返信に@SherifelKhatibに感謝しますが、私たちはキータップのサウンドとキータップバイブレータを有効/無効にする可能性を持っています。私の質問は、プログラムでこれを行う方法はありますか? 'Wifi' via 'WifiManager'、' AudioManager'を経由した 'Brightness'、音量など – Houcine

答えて

4

コメントに応じて:

私は

私は、ユーザーがキーボードでキーをタップしたとき(キーボードの設定のように)、キーボードの音や振動を有効/無効にする機能を持つようにしたい、アンドロイドのデフォルトのキーボードについて話しています私はSAMSUNG GALAXY S2、HTC ONEでのように、ソフトキーボードについて話している

&

...

私の知る限りなど、あなたはアコできません各インプットメソッドがそのサウンド/バイブレーションの好みの値を内部的に保つように、これを調整します。 (この書き込みライン30〜39のような)例Android (AOSP) IMeを参照してください:

<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の振動/音響効果を一点から制御することはできません。

+0

これを説明できますか?私はこれを実装する場所と方法を理解できません。 @ozbek –

+0

@UpendraShah、あなたはIMEを開発していますか? – ozbek

+0

実際に私のアプリケーションからvibrate_on_keypressとsound_on_keypressを処理したいので、これらを有効にするか無効にしたいのですか? –

9

タップ音を無効にするにはHow to disable default sound effects for all my application or activityをご覧ください。あなたの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に次のように定義することにより、

行わhttp://developer.android.com/reference/android/view/View.html#setHapticFeedbackEnabled(boolean) http://developer.android.com/reference/android/view/View.html#setSoundEffectsEnabled(boolean)

簡単に見て、プログラム触覚フィードバックとタッチを無効にするには音である

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

これはキーボードの鍵ではない、 – Houcine

+0

"キーボードの鍵"を説明できますか?ソフトキーボード(画面に表示されています)またはハードキーボード(ASUS Transformer-Padに取り付けられているなど)を意味しますか?だから、ユーザーがキーボードを使用するときに触覚フィードバックとサウンドをオフにしたいのですか? –

+0

私は、SAMSUNG GALAXY S2、HTC ONEなどのソフトキーボードについて話しています。 – Houcine

0

はい、ルートアクセス権がある場合は、これを行うことができます。その長いプロセスですが、これを行うことができます:

手順:1 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:あなたは、この機能からファイルをコピーします

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

を必要とするためasset managerを使用してアプリケーションフォルダ(あなたがアクセスできるどこでも)にこのファイルをコピーします。資産

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

ステップ3:再起動デバイス全て行うの

:システム環境のファイルシステムパスを上書き(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です。これらのステップは、キープレス音とキープレス振動をオフにします

関連する問題