Секретный код для запуска Android приложения
от aNNiMON
Вы наверняка сталкивались с секретными кодами, которые нужно вводить при наборе номера и которые открывают какие-нибудь специальные возможности. Например, *#*#4636#*#* показывает скрытое меню с информацией о телефоне, батарее и отчётом о статистике использования приложений. В устройствах Sony комбинация *#*#7378423#*#* открывает сервисное меню, где можно протестировать работу камеры, дисплея и прочих компонентов.
О том, как сделать, чтобы ваше приложение реагировало на какой-нибудь код и пойдёт речь в статье.
Для начала создадим секретную активити, которая просто показывает текст.
Теперь создаём BroadcastReceiver, который будет запускать секретную активити:
Этот BroadcastReceiver должен реагировать на действие "android.provider.Telephony.SECRET_CODE", прописываем его в AndroidManifest.xml:
В android:host указывается секретный код. В данном случае при наборе *#*#3228#*#* будет запущен SecretCodeReceiver, который запустит SecretActivity.
Из-за ограничения системы BroadcastReceiver не может быть активирован непосредственно после установки приложения — требуется хотя бы раз запустить приложение. Поэтому нужно создать ещё и главную активити:
Не забываем зарегистрировать активити в манифесте:
И вот демонстрация работы
Исходный код проекта: GitHub
Приложение: app-release.apk
О том, как сделать, чтобы ваше приложение реагировало на какой-нибудь код и пойдёт речь в статье.
Для начала создадим секретную активити, которая просто показывает текст.
- import android.content.Context;
- import android.content.Intent;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- public class SecretActivity extends AppCompatActivity {
- public static Intent newIntent(Context context) {
- final Intent intent = new Intent(context, SecretActivity.class);
- return intent;
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_secret);
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".SecretActivity">
- <TextView
- android:layout_centerHorizontal="true"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="@style/TextAppearance.AppCompat.Large"
- android:gravity="center"
- android:text="@string/top_secret" />
- </RelativeLayout>
Теперь создаём BroadcastReceiver, который будет запускать секретную активити:
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- public class SecretCodeReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- context.startActivity(
- SecretActivity.newIntent(context)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- );
- }
- }
- <receiver android:name=".SecretCodeReceiver">
- <intent-filter>
- <action android:name="android.provider.Telephony.SECRET_CODE" />
- <data android:scheme="android_secret_code" android:host="3228" />
- </intent-filter>
- </receiver>
Из-за ограничения системы BroadcastReceiver не может быть активирован непосредственно после установки приложения — требуется хотя бы раз запустить приложение. Поэтому нужно создать ещё и главную активити:
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
- }
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- <activity android:name=".SecretActivity" />
- <receiver android:name=".SecretCodeReceiver">
- <intent-filter>
- <action android:name="android.provider.Telephony.SECRET_CODE" />
- <data android:scheme="android_secret_code" android:host="3228" />
- </intent-filter>
- </receiver>
- </application>
И вот демонстрация работы
Исходный код проекта: GitHub
Приложение: app-release.apk