Page 799 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼山の電波地図のAndroid 7.0対応方法 yukoba 2017/3/22(水) 21:16 ┣Re:山の電波地図のAndroid 7.0対応方法 kamoland 2017/3/23(木) 5:37 ┃ ┗Re:山の電波地図のAndroid 7.0対応方法 yukoba 2017/4/1(土) 17:54 ┃ ┗Re:山の電波地図のAndroid 7.0対応方法 yukoba 2017/4/5(水) 13:00 ┃ ┗Re:山の電波地図のAndroid 7.0対応方法 kamoland 2017/4/6(木) 6:41 ┗Re:山の電波地図のAndroid 7.0対応方法 kamoland 2018/5/25(金) 12:14 ─────────────────────────────────────── ■題名 : 山の電波地図のAndroid 7.0対応方法 ■名前 : yukoba ■日付 : 2017/3/22(水) 21:16 -------------------------------------------------------------------------
山の電波地図の > Android 7.0では,画面消灯中のアプリの動作に制限がかかるため,画面消灯中は山旅ロガーの電波情報取得機能が作動しなくなります. > Android 7.0のスマートフォン,タブレットでは事実上,電波情報の取得ができなくなりますので,ご了承ください. > (2017/1/17) の件です。かなり悲しくて、調べていました。 これは Doze の件だと思うのですが、 https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/ に詳しい解説があります。 基本としては、画面が消灯すると数分で Light-Doze に入り、 ネットワーク通信が出来なくなります。 この記事は https://github.com/bignerdranch/doze-logger にサンプルがあります。 "15M IDLE ALARM" ボタンが15分と長すぎるので30秒に改造して試してみました。 adb shell dumpsys battery unplug adb shell dumpsys deviceidle step light で強制的に Light-Doze に入ります。 "15M IDLE ALARM" ボタンは AlarmManager.setExactAndAllowWhileIdle() を呼び出しているのですが、 指定した時間に正確に呼び出され、 Network connected: false Network available: true と返ってきます。 さらに、このサンプルアプリは、"WHITELIST APP" ボタンがあり、 Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); を実行するだけですが、 Doze 回避の登録がされ、この登録をすると、Light-Doze 中でも Network connected: true Network available: true になります。 Nexus 6P (Android 7.1) Galaxy S7 edge (Android 7.0) で同じ挙動になることを確認しました。 山旅ロガーが、どのような実装になっているのか正確なことが分からないのですが、 ・ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS で Doze 回避を指定する ・AlarmManager.setExactAndAllowWhileIdle() を使用する この2点で、Android 7.0 でも山の電波地図が使えるようになるのではないでしょうか? |
おっしゃるとおり,Android7.0で導入された浅いDozeの影響です. コメントありがとうございます # 悲しいのは私も同じです... しかし,(不用意に)ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSを使うのは, Google Playからリジェクトされるリスクがあると思っていまして,難しいところです. ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSを使うには, android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONSの権限をアプリに付与する必要があると思います. 上げられたサンプルでも, https://github.com/bignerdranch/doze-logger/blob/master/app/src/main/AndroidManifest.xml 設定されています. しかしこの権限は,どうもGoogleにチェックされている可能性があり, 以前,Taskerという割と有名でユーザ数も多いアプリが,この権限のせいでPlayからリジェクトされたという騒ぎがありました. http://www.androidpolice.com/2015/11/17/google-removes-another-app-from-the-play-store-for-dodgy-reasons-this-time-its-the-notorious-tasker/ (この件は,この権限を外したことでまた復活したようです) 一応,Googleのガイドラインは出ていますが,判断しづらいところです. https://developer.android.com/training/monitoring-device-state/doze-standby.html#whitelisting-cases ▼yukobaさん: >山の電波地図の > >> Android 7.0では,画面消灯中のアプリの動作に制限がかかるため,画面消灯中は山旅ロガーの電波情報取得機能が作動しなくなります. >> Android 7.0のスマートフォン,タブレットでは事実上,電波情報の取得ができなくなりますので,ご了承ください. >> (2017/1/17) > >の件です。かなり悲しくて、調べていました。 > >これは Doze の件だと思うのですが、 >https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/ >に詳しい解説があります。 > >基本としては、画面が消灯すると数分で Light-Doze に入り、 >ネットワーク通信が出来なくなります。 > >この記事は >https://github.com/bignerdranch/doze-logger >にサンプルがあります。 > >"15M IDLE ALARM" ボタンが15分と長すぎるので30秒に改造して試してみました。 > >adb shell dumpsys battery unplug >adb shell dumpsys deviceidle step light >で強制的に Light-Doze に入ります。 > >"15M IDLE ALARM" ボタンは >AlarmManager.setExactAndAllowWhileIdle() >を呼び出しているのですが、 > >指定した時間に正確に呼び出され、 >Network connected: false >Network available: true >と返ってきます。 > >さらに、このサンプルアプリは、"WHITELIST APP" ボタンがあり、 >Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); >intent.setData(Uri.parse("package:" + getPackageName())); >startActivity(intent); >を実行するだけですが、 > >Doze 回避の登録がされ、この登録をすると、Light-Doze 中でも >Network connected: true >Network available: true >になります。 > >Nexus 6P (Android 7.1) >Galaxy S7 edge (Android 7.0) >で同じ挙動になることを確認しました。 > >山旅ロガーが、どのような実装になっているのか正確なことが分からないのですが、 >・ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS で Doze 回避を指定する >・AlarmManager.setExactAndAllowWhileIdle() を使用する >この2点で、Android 7.0 でも山の電波地図が使えるようになるのではないでしょうか? |
>しかしこの権限は,どうもGoogleにチェックされている可能性があり, 気になったので、一般論として、判断基準を Google Play に問い合わせてみました。 迷惑がかからないように、 山旅ロガーであることは絶対に分からない形で問い合わせてみました。 Android 8.0 で位置情報を Doze で取れないようにするとかしないとか 話になっていますが、 バッテリーに負荷をかける形で位置情報を取るアプリを 禁止するのかも聞いてみました。 (万が一これが禁止だと、山旅ロガーが死んでしまいます) なんとなく、思うに、 https://developer.android.com/training/monitoring-device-state/doze-standby.html#whitelisting-cases の「タスク自動化アプリ(ロケーション操作などの自動化操作をスケジュールしている。)」 に該当するから、使用しても良い、という返事が来るような気がします。 山旅ロガーを Android 7.x で使用した際に、 「スリープ中は電波情報を記録しない」に 強制的にチェックが入ってしまうと思うのですが、 Android 7.x は ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS を使わなくても、ユーザーが指定したら、 個別にバッテリー最適化の対象外に指定できると思うのですが、 ・「スリープ中は電波情報を記録しない」の強制チェックを止める ・ユーザーにバッテリー最適化の対象外に指定してもらう で回避できるのではないでしょうか? (すいません、これ、実際に実験アプリを書かずにコメントしてます) ▼kamolandさん: >おっしゃるとおり,Android7.0で導入された浅いDozeの影響です. >コメントありがとうございます ># 悲しいのは私も同じです... > >しかし,(不用意に)ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSを使うのは, >Google Playからリジェクトされるリスクがあると思っていまして,難しいところです. > >ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSを使うには, >android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONSの権限をアプリに付与する必要があると思います. >上げられたサンプルでも, >https://github.com/bignerdranch/doze-logger/blob/master/app/src/main/AndroidManifest.xml >設定されています. > >しかしこの権限は,どうもGoogleにチェックされている可能性があり, >以前,Taskerという割と有名でユーザ数も多いアプリが,この権限のせいでPlayからリジェクトされたという騒ぎがありました. >http://www.androidpolice.com/2015/11/17/google-removes-another-app-from-the-play-store-for-dodgy-reasons-this-time-its-the-notorious-tasker/ >(この件は,この権限を外したことでまた復活したようです) > >一応,Googleのガイドラインは出ていますが,判断しづらいところです. >https://developer.android.com/training/monitoring-device-state/doze-standby.html#whitelisting-cases > >▼yukobaさん: >>山の電波地図の >> >>> Android 7.0では,画面消灯中のアプリの動作に制限がかかるため,画面消灯中は山旅ロガーの電波情報取得機能が作動しなくなります. >>> Android 7.0のスマートフォン,タブレットでは事実上,電波情報の取得ができなくなりますので,ご了承ください. >>> (2017/1/17) >> >>の件です。かなり悲しくて、調べていました。 >> >>これは Doze の件だと思うのですが、 >>https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/ >>に詳しい解説があります。 >> >>基本としては、画面が消灯すると数分で Light-Doze に入り、 >>ネットワーク通信が出来なくなります。 >> >>この記事は >>https://github.com/bignerdranch/doze-logger >>にサンプルがあります。 >> >>"15M IDLE ALARM" ボタンが15分と長すぎるので30秒に改造して試してみました。 >> >>adb shell dumpsys battery unplug >>adb shell dumpsys deviceidle step light >>で強制的に Light-Doze に入ります。 >> >>"15M IDLE ALARM" ボタンは >>AlarmManager.setExactAndAllowWhileIdle() >>を呼び出しているのですが、 >> >>指定した時間に正確に呼び出され、 >>Network connected: false >>Network available: true >>と返ってきます。 >> >>さらに、このサンプルアプリは、"WHITELIST APP" ボタンがあり、 >>Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); >>intent.setData(Uri.parse("package:" + getPackageName())); >>startActivity(intent); >>を実行するだけですが、 >> >>Doze 回避の登録がされ、この登録をすると、Light-Doze 中でも >>Network connected: true >>Network available: true >>になります。 >> >>Nexus 6P (Android 7.1) >>Galaxy S7 edge (Android 7.0) >>で同じ挙動になることを確認しました。 >> >>山旅ロガーが、どのような実装になっているのか正確なことが分からないのですが、 >>・ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS で Doze 回避を指定する >>・AlarmManager.setExactAndAllowWhileIdle() を使用する >>この2点で、Android 7.0 でも山の電波地図が使えるようになるのではないでしょうか? |
>気になったので、一般論として、判断基準を >Google Play に問い合わせてみました。 何一つお答えできません、に相当する定型文が帰ってきただけでした。 どれを禁止するかしないかは気まぐれです、 類似アプリでも禁止したりしなかったりします、 に相当する、もっと丁寧な形式的な表現の定型文も頂きました。 以上でございます。 技術的には可能そうですが、全体として無理そうなので諦めます。 |
情報ありがとうございます とても参考になりました となりますと,実用的ではないですが, 電波情報をとり続けるにはスマホの画面を点灯しっぱなしで使うぐらいしか無さそうです. ポケモンGOみたいな感じでしょうか # 節電と称してG○○○○○が規制をかけるせいで, # かえって電池の消費量を増やさざるを得ないという,○○な話です ▼yukobaさん: >>気になったので、一般論として、判断基準を >>Google Play に問い合わせてみました。 > >何一つお答えできません、に相当する定型文が帰ってきただけでした。 > >どれを禁止するかしないかは気まぐれです、 >類似アプリでも禁止したりしなかったりします、 >に相当する、もっと丁寧な形式的な表現の定型文も頂きました。 > >以上でございます。 >技術的には可能そうですが、全体として無理そうなので諦めます。 |
この件ですが,その後の調査で, ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSのための権限を付与しなくても, 自主的に「バッテリーの最適化」の対象からアプリを除外してくだされば,消灯中でも電波状況を取得できました. ですので次のバージョンの山旅ロガーで,「バッテリーの最適化」の対象から除外されている場合は,消灯中でも電波情報を取得するようにしようと思います. ただし,ASUSとHUAWEIの端末についてはうまくいっていませんので, これらについては従来通り消灯中の電波情報取得は不可となります. Android 8.0以上については,今後の調査といたします 亀レスで恐縮です ▼yukobaさん: >山の電波地図の > >> Android 7.0では,画面消灯中のアプリの動作に制限がかかるため,画面消灯中は山旅ロガーの電波情報取得機能が作動しなくなります. >> Android 7.0のスマートフォン,タブレットでは事実上,電波情報の取得ができなくなりますので,ご了承ください. >> (2017/1/17) > >の件です。かなり悲しくて、調べていました。 > >これは Doze の件だと思うのですが、 >https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/ >に詳しい解説があります。 > >基本としては、画面が消灯すると数分で Light-Doze に入り、 >ネットワーク通信が出来なくなります。 > >この記事は >https://github.com/bignerdranch/doze-logger >にサンプルがあります。 > >"15M IDLE ALARM" ボタンが15分と長すぎるので30秒に改造して試してみました。 > >adb shell dumpsys battery unplug >adb shell dumpsys deviceidle step light >で強制的に Light-Doze に入ります。 > >"15M IDLE ALARM" ボタンは >AlarmManager.setExactAndAllowWhileIdle() >を呼び出しているのですが、 > >指定した時間に正確に呼び出され、 >Network connected: false >Network available: true >と返ってきます。 > >さらに、このサンプルアプリは、"WHITELIST APP" ボタンがあり、 >Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); >intent.setData(Uri.parse("package:" + getPackageName())); >startActivity(intent); >を実行するだけですが、 > >Doze 回避の登録がされ、この登録をすると、Light-Doze 中でも >Network connected: true >Network available: true >になります。 > >Nexus 6P (Android 7.1) >Galaxy S7 edge (Android 7.0) >で同じ挙動になることを確認しました。 > >山旅ロガーが、どのような実装になっているのか正確なことが分からないのですが、 >・ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS で Doze 回避を指定する >・AlarmManager.setExactAndAllowWhileIdle() を使用する >この2点で、Android 7.0 でも山の電波地図が使えるようになるのではないでしょうか? |