1
0
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

【Android/Java】BootCompleteでの起動時処理(Android11)

Last updated at Posted at 2024-01-25

やりたいこと

色々と記事があるけど、BootCompleteの動作の整理を行いたい

Step1.通常設定(BootCompleteの受信)

(出尽くしている内容だが)以下を追加する

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:sharedUserMaxSdkVersion="31">

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

    <application
        <activity></activity>
        <receiver
            android:name=".StartReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

StartReceiver.java

public class StartReceiver  extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
             :(起動時に実行したい処理)
        }
    }
}

Step2.実行結果

Activity起動などを実行した結果は以下の通り

実行処理 結果
Activity起動(StartActivity) 起動しない
Service起動(StartService) 起動しない
SharedPreferencesの書き込み 起動する

解説

  1. Activity起動/Service起動:単純に起動制限がかかっているため(https://developer.android.com/guide/components/activities/background-starts?hl=ja)
  2. SharedPreference書き込み:起動制限対象外のため、書き込みができていると思われる

起動直後にActivityなどの起動は行えないが、「端末が起動したか?」の状態を管理することぐらいはできると思われる

Step3.それでもActivity/Serviceを起動させたい!

条件を整えることができれば、上記の制限を突破することが可能

条件 概要
端末の証明書ファイル 対象となる端末の証明書ファイルを用いてAPKを生成する
システム管理権限 AndroidManiestで android:sharedUserId="android.uid.system"を定義する

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:sharedUserMaxSdkVersion="31"
    android:sharedUserId="android.uid.system">

 
証明書があれば、上記をAndroidManifestに設定することで、システム管理者に昇格することが可能。
ただ、ハードの製造元でもなければ証明書ファイルを入手することは不可能と思われる。
どちらかというと、自社でハードを製造しているような場合でしかできない手法だと思われます。

なお、システム管理者になることでWebViewがセキュリティ上の理由から使用できなくなるなど制約もあり一長一短(…実は抜け道もある)

最後に

BootCompleteでの処理は、あまり現実的なことはできないかんというのが感想
年々制限が厳しくなっており、実現したいことが実現しにくくなっている気がします

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0