1
0

Androidスマホ起動時に自動的にサービスを起動させる

Last updated at Posted at 2024-08-16

以前、Androidのフォアグラウンドサービスを使って、位置情報を常に取得するサービスを作成しました。

Androidのフォアグラウンドサービスで位置情報を取得する

今回は、これをCordovaプラグインにするとともに、Androidスマホ起動時にも自動的に起動するようにします。

ちなみに、この投稿は、以下の投稿の補足です。全ソースファイルは以下を参照してください。
 散歩ルート計画アプリを作った

AndroidManifest.xml

Androidスマホの起動時に、OSから通知されるブロードキャストを受け取ることで、起動時の処理ができるようになります。
そのために、以下のパーミッションを付けておく必要があります。

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

次に、受け取り先のクラスを指定します。

AndroidManifest.xml
    <receiver android:name="jp.or.myhome.sample.plugin.LocationRecorder.Main$StartupReceiver" android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

受け取り先のクラスは、BroadcastReceiverを継承しておく必要があります。

Main.java
    public static class StartupReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d(TAG, "StartupReceiver.onReceive");

            ・・・・・

        }
    }

上記のクラスは、Main.javaの中に定義したので、AndroidManifestには以下のような記載になっています。

android:name="jp.or.myhome.sample.plugin.LocationRecorder.Main$StartupReceiver"

plugin.xml

結局のところ、Cordovaプラグインのplugin.xmlは以下のようになりました。

plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    id="cordova-plugin-locationrecorder" version="0.0.1">
    <name>LocationRecorderPlugin</name>
    <js-module src="www/plugin_locationrecorder.js" name="locationrecorderplugin">
        <clobbers target="locationrecorderplugin" />
    </js-module>
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="LocationRecorderPlugin" >
                <param name="android-package" value="jp.or.myhome.sample.plugin.LocationRecorder.Main"/>
                <param name="onload" value="true" />
            </feature>
        </config-file>
        <config-file target="res/xml/config.xml" parent="/*">
            <preference name="android-minSdkVersion" value="26" />
        </config-file>
        <config-file target="AndroidManifest.xml" parent="/manifest">
            <uses-permission android:name="android.permission.INTERNET" />
            <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
            <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
            <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
            <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
        </config-file>
        <config-file target="AndroidManifest.xml" parent="/manifest/application">
            <service android:name="jp.or.myhome.sample.plugin.LocationRecorder.LocationService" android:exported="false" android:foregroundServiceType="location" />
            <receiver android:name="jp.or.myhome.sample.plugin.LocationRecorder.Main$StartupReceiver" android:exported="false">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </receiver>
        </config-file>
        <source-file src="src/android/jp/or/myhome/sample/plugin/LocationRecorder/Main.java" target-dir="src/jp/or/myhome/sample/plugin/LocationRecorder" />
        <source-file src="src/android/jp/or/myhome/sample/plugin/LocationRecorder/LocationService.java" target-dir="src/jp/or/myhome/sample/plugin/LocationRecorder" />
        <source-file src="src/android/jp/or/myhome/sample/plugin/LocationRecorder/LocationDbHelper.java" target-dir="src/jp/or/myhome/sample/plugin/LocationRecorder" />
        <source-file src="src/android/jp/or/myhome/sample/plugin/LocationRecorder/HttpPostJson.java" target-dir="src/jp/or/myhome/sample/plugin/LocationRecorder" />
        <framework src="com.google.android.gms:play-services-location:21.0.1" />
    </platform>
</plugin>

以上

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