iOS・Android

Android端末起動時にアプリを強制起動する

この記事は約5分で読めます。

こんにちは!

一般的なアプリでは使われないと思いますが、業務端末などでデバイスを再起動した後にホーム画面を開いたときに特定の業務アプリケーションが起動する設定について紹介します。

環境

  • Android Ver 9 Pie
  • kotlin 1.15.0

※ Android Kotlin経験1ヶ月のペーペーのため、間違いがあれば優しくご指摘お願い致します。

実装内容

デバイスが起動されたことをアプリで検知するためには、2つのファイルの作成・変更が必要になります。

  1. BroadcastReceiverクラスを継承したクラスの作成
  2. AndroidManifestにパーミッションとreceiverの登録

まずは1のクラスを作成します。

// StartupReceiver.kt

class StartupReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent?) {
        Intent(context, MainActivity::class.java).apply {
            this.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            context.startActivity(this)
        }
    }
}

解説するとIntentを受け取って、MainActivityを起動するだけのクラスを作成しました。

次に2のAndroidManifestにパーミンションなどを追記します。

// AndroidManifest

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <receiver android:name=".StartupReceiver">
        <intent-filter>
           <action android:name="android.intent.action.BOOT_COMPLETED" />

           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

uses-permissionでアプリに権限を追加します。

公式の説明を翻訳すると、システムの起動終了後にブロードキャストされて、ACTION_BOOT_COMPLETEDをアプリが受信できるようにすると書かれています。

なので、アプリがシステム起動のアクションを受信できるようになるようです。

receiverには先程定義したStartupReceiverクラスを指定して、どのアクションが行われたらStartupReceiverにintentを渡すかを定義しています。

今回ですとactionにaction.BOOT_COMPLETEDを指定して、システム起動アクションが行われたらと言うふうに実装しています。

ここまで行うとデバイスを再起動して、ホーム画面に遷移するとStartupReceiverクラスの定義したアプリが自動起動するかと思います。

最後に

以上でAndroidでデバイスの起動後にアプリを強制起動する方法についてです。

BroadcastReceiverとuser-permission, receiverを使うことでsleep解除やロック画面解除時などのアクションをアプリで受信することができるかもしれないです。

ちなみに暗黙的ブロードキャストと明示的ブロードキャストの2種類があり、今回の方法は前者に当たるかと思います。(詳しくは調べていないので違っていたらすみません。)

暗黙的ブロードキャストはデバイスの電池寿命やパフォーマンスに影響するため、Android8から規制がかかっているようですが、例外も存在します。

ここに書くと長くなりそうなので、また機会があれば別でまとめようかと思います。

参考

BroadcastReceiver  |  Android Developers
【Android】 Broadcast Recieverでintentを受け取る - Qiita
Broadcast Recieverとは?BroadcastReceiver(ブロードキャストレシーバー)とは、ブロードキャストしたインテントを受け取る仕組みのことOSのAndroidシステム側…
Manifest.permission  |  Android Developers
Implicit broadcast exceptions  |  Background work  |  Android Developers
Implicit broadcasts that are exempted from background restrictions.