*#*#12345#*#*
ダイヤラになどの秘密のコードが入力されたときにアプリを起動するにはどうすればよいですか?
Androidドキュメントで解決策が見つかりませんでした。
これが私がやった方法です:
メイン アクティビティをインテント フィルターなしに変更しました。
<activity
android:name=".ParentTrap"
android:label="@string/title_activity_parent_trap"
android:theme="@android:style/Theme.Holo" >
</activity>
次に、インテント フィルター アクションを使用してブロードキャスト レシーバーを作成しました。android.provider.Telephony.SECRET_CODE
次に、データを追加しました。全体は以下のとおりです。
<receiver android:name=".ParentTrap$Launch" >
<intent-filter>
<action android:name="android.provider.Telephony.SECRET_CODE" />
<data
android:host="(secret code)"
android:scheme="android_secret_code" />
</intent-filter>
</receiver>
完了したら、クラスを作成し (メイン クラスで Launch クラスを作成し、BroadCast レシーバーを拡張しました)、次に onReceive クラスで、アクティビティを起動するインテントを起動します。
次に*#*#(secret code)#*#*
、ダイヤラーに入力すると、アプリが起動します。
放送受信者は、適切な活動目的に登録する必要があるかもしれません。たとえば、Intent.ACTION_CALLは魅力的に見えます。問題は、この1つの特定の番号のみを受け取るようにインテントをフィルタリングする方法です。私はそれがこのように見えるだろうと思う(私はドキュメントで見つけたものに基づいて推測している):
<action name=".YourAction">
<intent-filter . . . >
<action android:name="android.intent.action.CALL" />
<!-- data is crutial here, you have to figuire it out exacly yourself -->
<data android:scheme="tel" android:path="yourSpecyficSecretCode" />
</intent-filter>
</action>
こことここを見てください。LogCatを使用して、正確に意図されたコンタチンを確認し、これを適切にフィルタリングできます。