58
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

androidでpush通知設定を確認、変更画面を開く

Last updated at Posted at 2017-04-29

iOSだとダイアログを出してその場でpush通知を許可するか拒否するかをユーザーに促すことが出来る。
androidの場合はそのようにサッと通知設定を変更することは出来ない。

androidのpush通知設定

そもそもandroidの場合はpush通知のパーミッション確認ダイアログが存在しない。Playストアでのダウンロード時の同意ボタンの内容に、push通知が含まれている。そのためandroidではデフォルトでpush通知許可ということになる。

じゃあandroidではpush通知を拒否するすべがないかというとそういうわけではない。アプリやpush通知を送るサーバー側で独自にフラグを持たせて通知するしないを管理することもできるが、システム設定からアプリごとに通知をブロックすることもできる。

端末 > アプリ
Screenshot_1493477196.png

アプリを選択するとアプリごとの設定画面から「通知」を選ぶ
Screenshot_1493477202.png

このアプリからの通知をどうするか選択できる
Screenshot_1493477208.png

システム設定値をいじれるのか

ここで問題になるのは、この値をアプリ側から操作できるのかということ。この値はアプリ側から操作することは出来ない。そのため、もしユーザーがここで通知をブロックしていた場合は上の画面を開いてから値を設定しないといけなくなる。

iOSのようにアプリ内でダイアログを表示して…というように比較的に簡単に操作はできず、ユーザーの手数が増えてしまうことになるがしょうがない。

通知設定値を取得する

通知に関して、ブロックされていたら解除を促したいという動作を要求されることは多そうだ。実際そういうものを作るとしたら、現在の設定値を取得=>ブロックされてたらアプリごとの設定画面を表示、というような流れになると思う。

というわけで、まずは現在の通知設定値を取得する。値の変更ができないだけで、現在値を取得することはできる。

NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
boolean areNotificationsEnabled = notificationManagerCompat.areNotificationsEnabled();

これで今の設定値(boolean)を取得できる。ただしareNotificationsEnabledはサポートライブラリがv24でないと使えないので注意。
android4.3以下の場合、そもそもシステム側でアプリごとの通知許可orブロックという機能がないため、それと通知許可orブロックできるバージョンとの足並みを揃えるためにcompatを使っている。

アプリごとの設定画面を開く

 startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));

この1行でアプリごとの設定画面を開ける。ただし、これだけだと最近開いたアプリケーションにその設定画面が出てきたりスタックに入っちゃったりするので、お好みでintentのフラグを適当に設定したほうがいいかもしれない。

Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);

参考: http://qiita.com/suzukihr/items/865e84b0a8c6b0783f42

58
39
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
58
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?