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); }