2016-07-14 11 views
0

Ich erstelle eine benutzerdefinierte Tastatur für Android. Auf Tastendruck meiner Tastatur, was ich will, ist Vibration auf der Hand wie Android-Soft-Tastatur. Ich habe sogar auf diese Antwort enable/disable keyboard sound and vibration programmatically hingewiesen, aber ich konnte nicht verstehen, wie man es benutzt. Kann jemand erklären, wie man diese Eigenschaft in meiner kundenspezifischen Tastaturanwendung erhält?Vibration auf Tastendruck in android Soft-Tastatur

Antwort

0

Vergessen Sie nicht, Vibrationen in Ihr Manifest aufzunehmen.

0

Ja, Sie können dies tun, wenn Sie Root-Zugang haben. Es ist ein langwieriger Prozess, aber Sie können dies tun:

Schritt: 1 Erstellen Sie XML-Datei mit dem Namen com.android.inputmethod.latin_preferences.xml und in Assets speichern.

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="true" /> 
</map> 

Schritt 2: Kopieren Sie diese Datei in Ihrem Anwendungsordner (überall dort, wo Sie zugreifen können) mit asset manager für die Sie Datei kopieren müssen

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

diese Funktion aus Vermögenswerte

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

Schritt 3: Systemeinstellung Dateisystempfad überschreiben (destPath) ist /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(); 
    } 

Schritt 4: Gerät neu starten

Das ist alles fertig ist. In diesem Schritt wird der Ton des Tastendrucks deaktiviert und die Vibration des Geräts aktiviert.