なんだかんだでプログラムが好き

私 すずきかつーき が主にプログラムに関する事を書いたり書かなかったりします

Xamarin.Android で BOOT_COMPLETED のテスト

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

上手くいかない場合は STOP状態 を疑う。 参考: yuki312.blogspot.jp

ちなみに、ここにはSTOP状態でも強制でbroadcastインテントでreceiverのテストが出来ると書いてあるが、僕の環境だと例外が発生してしまった。

色々調べた結果、フラグを直接10進で入れればよさそう

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -f 32

なお、このSTOP状態、インストール後一度も起動していない状態みたいに書いてあるので、一度起動すれば良いと思いがちだが、アプリを強制停止(履歴からのフリックやごみ箱ボタンでの削除など、メーカーによってまちまち)すると、容易にSTOP状態に戻ってしまうっぽい。

確認の為に、packages-stopped.xml というファイルを見るとよいと色々なところに書いてあったが、自分の環境だと見当たらなかった。 (仮に見つかっても Permission denied って言われるのは目に見えているのだけれど)

なお、プログラム内部からBOOT_COMPLETEDを受け取るかどうかを変更する方法もある。

<例>

                var pm = Activity.PackageManager;
                if (isStartup)
                {
                    pm.SetComponentEnabledSetting(new ComponentName(Activity.ApplicationContext, Java.Lang.Class.FromType(typeof(DeviceBootReceiver))),ComponentEnabledState.Enabled,ComponentEnableOption.DontKillApp);
                }else{
                    pm.SetComponentEnabledSetting(new ComponentName(Activity.ApplicationContext, Java.Lang.Class.FromType(typeof(DeviceBootReceiver))), ComponentEnabledState.Disabled, ComponentEnableOption.DontKillApp);
                }