質問: ### 開発環境 ・VisualStudio2017 C# xamarin.android ・Windows7 ・Android 7.1.2(Nexus5X) ### アプリ概要 1秒おきに表示更新するシンプルな時計ウィジェットアプリを制作しています。 AppWidgetProviderとServiceの派生クラスを作成し、 Intent.ActionTimeTick("android.intent.action.TIME_TICK")を 1分おきに受信して1秒間隔タイマーを起動し表示更新しています。 タイマーは60秒で終了し、次のIntent.ActionTimeTickでまたタイマーを起動して繰り返します。 この処理はServiceで行っています。 ### 質問内容 現在は開発中でVS2017からデバッグ実行してNexus5X上で実行しています。 初期インストール時は問題ないのですが、 ウィジェットを配置し動作させた状態でVisualStudioからデバッグ実行して アプリ更新するとウィジェットの1秒毎の表示更新が停止してしまいます。 アプリを更新するとServiceやIntent.ActionTimeTickの通知が停止してしまうようなので 再起動する処理を実装したいのですがそのタイミングが取れません。 Service#OnCreate(),OnDestroy(),OnStartCommand()や Application派生クラスを実装してApplication#OnCreate()などに デバッグログ出力コードを入れてみたのですが、いずれも実行されていないようでした。 あとバージョン番号をあげて試してみましたが同様でした。 たぶん、Google Playでアプリを更新するときにも 同じ問題が発生するような気がするので対処が必要だと思っています。 以前Eclipse環境で同じようなアプリを制作したときにはこのような症状は無かったと思うのですが、、、 数年前のことなのでSDKの違いもあるのかもしれませんが。。 再起動する処理を実装する方法を教えていただけませんでしょうか。
回答: ウィジェットを作ったことがないので見当違いなことを言っているかもしれませんが、 BroadcastReceiverではだめでしょうか? アプリ更新時 android.intent.action.MY_PACKAGE_REPLACED もしくは android.intent.action.PACKAGE_REMOVED android.intent.action.PACKAGE_ADDED android.intent.action.PACKAGE_REPLACED 端末が再起動したときも考慮して、android.intent.action.BOOT_COMPLETEDも見るとよいかと思います サンプルコード ``` using Android.App; using Android.Content; namespace MyApp.Droid { [BroadcastReceiver] [IntentFilter(new[] { "android.intent.action.BOOT_COMPLETED" , "android.intent.action.MY_PACKAGE_REPLACED" })] public class MyBroadcastReceiver : BroadcastReceiver { public override void OnReceive(Context context, Intent intent) { var myIntent = new Intent(context, typeof(MyService)); context.StartService(myIntent); } } } ```