天天看點

android切換輸入法工具類

android切換輸入法工具類

共享一個切換輸入法的工具類,可以實作以下功能

  • 檢測輸入法是否安裝
  • 安裝輸入法
  • 切換輸入法(在utf7Ime和android之間切換,如果需要切換成其他的輸入法,請自行修改)
import android.util.Log;

import com.meitu.travelapk.data.ConfigData;
import com.meitu.travelapk.data.PathData;
import com.meitu.travelapk.data.TestReport;

import org.junit.Assert;
import org.junit.Test;

import java.io.File;

/**
 * 用于輸入法的管理
 */
public class InputMethodUtils {
    private static final String TAG = "InputMethodUtils";
    public static String UTF7_PKG = "jp.jun_nama.test.utf7ime";
    public static String UTF7_KEY = "jp.jun_nama.test.utf7ime/.Utf7ImeService";
    public static String Android_KEY = "com.android.inputmethod.latin/.LatinIME";

    public enum InputMethod {
        UTF7, ANDROID
    }

    /**
     * 安裝utf7輸入法
     */
    public static void installUTF7() {
        if (!DeviceUtils.isAppInstalled(UTF7_PKG)) {
            //拷貝apk到指定目錄
            String path = ConfigData.rootPath;
            String fileName = PathData.utfApkName;
            File apkFile = new File(path + fileName);
            if (!apkFile.exists()) {
                FileUtils.copyAssets(path, fileName);
            }
            //安裝
            DeviceUtils.installApk(apkFile);
        }
    }

    /**
     * 切換将目前輸入法,另啟一個線程
     */
    public static void switchInputMethod(final InputMethod input) {
        Thread switchThread = new Thread(new Runnable() {
            @Override
            public void run() {
                String installCommand;
                switch (input) {
                    case UTF7:
                        if (!DeviceUtils.isAppInstalled(UTF7_PKG)) {
                            installUTF7();
                        }
                        installCommand = "settings put secure default_input_method " + UTF7_KEY;
                        TestReport.i("切換到輸入法[utf7]");
                        break;
                    case ANDROID:
                        installCommand = "settings put secure default_input_method " + Android_KEY;
                        TestReport.i("切換到輸入法[Android]");
                        break;
                    default:
                        installCommand = "settings put secure default_input_method " + Android_KEY;
                        break;
                }

                ShellUtils.execCommand(installCommand, false);
            }
        });
        switchThread.start();
    }

}