Android secret codeの実装方法
例えば、IMEI(端末識別番号)などは、ダイアラーから「*#06#」と入力すると表示されます。こんな感じに。
この「*#06#」のようなものがAndroid secret codeです。シークレットコードは、このIMEI表示のようにフレームワークで予約されたものもありますが、自分で作ることもできます。ダイアラーで「*#*#」で始まり「#*#*」で終わるコードなら、Broadcast Recieverで拾える仕組みがフレームワークで用意されてます。自分のアプリに隠し機能やイースターエッグ、あとデバッグモードへの切替機能をつけたい場合などにつかえます。
実装方法
シークレットコード「*#*#5963#*#*」を入力したら、秘密の画面を開くようなサンプルを作るとします。
AndroidManifest.xml
ダイアラーで入力したら、Androidフレームワークは「android_secret_code://」で始まるBroadcastIntentを投げます。例えば「*#*#5963#*#*」と入力したら、BroadcastIntentの内容は
なので、MainReceiverのintent-filterを以下のように設定します。
<receiver android:name=".MainReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SECRET_CODE" /> <data android:scheme="android_secret_code" android:host="5963" /> </intent-filter> </receiver>
MainReceiver.java
普通にRecevierで拾ったあとの処理を実装します。ここでは、秘密の画面を開くためにSecretActivityにIntentを投げています。
public class MainRecevier extends BroadcastReceiver { private static String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SECRET_CODE_ACTION)) { Intent secretIntent = new Intent(context, SecretActivity.class); secretIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(secretIntent); } } }
SecretActivity.java
ここではシークレットコード入れたあと開く画面を実装しています。
public class SecretActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { TextView tx = new TextView(this); tx.setText("Welcome to my secret page!"); super.onCreate(savedInstanceState); setContentView(tx); } }