<< Android-Note
アプリの設定が有効になっているか調べる方法
ユーザー補助やIMEのようなアプリの場合、端末の設定が有効になっていないと働くことができません。
しかし、アプリ側では設定を有効にしたり無効にしたりすることはできないようになっています。
そこで自分のアプリの設定が有効かどうかをSettings.Secureクラスを使って調べれば、有効と無効の時で処理を変えることができます。
例えばユーザー補助が有効になっているかどうか調べるコードは次のようになります。
public class MainActivity extends Activity { String SEARCH_PACKAGE_NAME = "com.MyApp.myapp.MyService"; //調べたいパッケージ名 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ContentResolver cr = getContentResolver(); int accessibilityEnalbledFlag = Settings.Secure.getInt( cr, Secure.ACCESSIBILITY_ENABLED, 0); if(accessibilityEnalbledFlag == 1){ String settingValues = Secure.getString(cr, Secure.ENABLED_ACCESSIBILITY_SERVICES); TextUtils.StringSplitter splitter = new TextUtils.SimpleStringSplitter(':'); splitter.setString((settingValues != null) ? settingValues : ""); for(String accessibility : splitter){ if(accessibility.contains(SEARCH_PACKAGE_NAME)){ //探しているパッケージがあった時の処理 } } } } }
有効になっているアクセシビリティのパッケージ名の一覧はSecure.getStringメソッドにENABLE_ACCESSIBILITY_SERVICESを渡すことで調べることができます。ただし、パッケージ名が:の文字で区切られているので1つ1つのパッケージを調べるのにSimpleStringSplitterを使っています。
もしアクセシビリティではなくIMEが有効になっているかを調べたいときもこれと同じようにして調べることが可能です。調べ方だけ抜き出すと次のようなコードです。
String SEARCH_PACKAGE_NAME = "com.MyApp.myapp.MyService"; //調べたいパッケージ名 String imeValues = Secure.getString(cr, Secure.ENABLED_INPUT_METHODS); //有効なIME一覧を取得 TextUtils.StringSplitter imeSplitter = new TextUtils.SimpleStringSplitter(':'); imeSplitter.setString((imeValues != null) ? imeValues : ""); for(String imePackage : imeSplitter){ if(imePackage.contains(SEARCH_PACKAGE_NAME)){ //調べたいパッケージが見つかった時の処理 } }
ENABLE_INPUT_METHODSで有効なIMEの一覧を文字列で取得できます。後はアクセシビリティと同じように1つ1つ調べていって目的のパッケージ名を見つけることができます。
© Kaz