質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

11485閲覧

Push通知の設定状態(ON/OFF)をアプリから取得する方法

flaumig

総合スコア67

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/03/09 06:11

Android端末の設定でPush通知がOFFにされている場合は、アプリ側でそれをチェックし
「通知の設定をONにしてください」というダイアログを出す、もしくは設定画面に遷移する
というような処理を考えています。

調べてみたところアプリ側で通知の設定状態を取得するような処理が見つけられませんでした。

iOSで言う下記のようなメソッドはAndroidには存在しないのでしょうか?

Objective

1- (UIUserNotificationSettings *)currentUserNotificationSettings

対象の端末としてはAndroid4.x〜6.xを考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

java

1/** 2 * Created by desgraci on 5/7/15. 3*/ 4public class NotificationsUtils { 5 6private static final String CHECK_OP_NO_THROW = "checkOpNoThrow"; 7private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; 8 9public static boolean isNotificationEnabled(Context context) { 10 11 AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); 12 13 ApplicationInfo appInfo = context.getApplicationInfo(); 14 15 String pkg = context.getApplicationContext().getPackageName(); 16 17 int uid = appInfo.uid; 18 19 Class appOpsClass = null; /* Context.APP_OPS_MANAGER */ 20 21 try { 22 23 appOpsClass = Class.forName(AppOpsManager.class.getName()); 24 25 Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class); 26 27 Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); 28 int value = (int)opPostNotificationValue.get(Integer.class); 29 30 return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED); 31 32 } catch (ClassNotFoundException e) { 33 e.printStackTrace(); 34 } catch (NoSuchMethodException e) { 35 e.printStackTrace(); 36 } catch (NoSuchFieldException e) { 37 e.printStackTrace(); 38 } catch (InvocationTargetException e) { 39 e.printStackTrace(); 40 } catch (IllegalAccessException e) { 41 e.printStackTrace(); 42 } 43 return false; 44} 45}

java

1NotificationsUtils.isNotificationEnabled(getApplicationContext())

SC-04E
Android 5.0.1
で確認したところ問題ありませんでした。

参照したURLは以下のようになります。

https://code.google.com/p/android/issues/detail?id=38482

http://stackoverflow.com/questions/11649151/android-4-1-how-to-check-notifications-are-disabled-for-the-application

投稿2016/03/11 03:25

編集2016/03/14 03:18
kongbab04

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

flaumig

2016/03/14 00:29

kongbab04さん ご回答ありがとうございます。 こちらの環境でも実験してみたところ4.3〜6.0まで動作することを確認しました。 ただ、AppOpsManager自体が4.3から実装されたクラスになるので4.1〜4.2だと使えないようです。 4.1〜4.2でも使える判定方法があると良いのですが…。
kongbab04

2016/03/14 03:20

そうですね… 4.3からの隠し機能になっているようですね… お力になれずすみません。 何か見つかったら、またコメントします…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問