13

ユーザーがアプリ設定でプッシュ通知をオフにしているかどうかをプログラムで確認する方法は? アプリ設定インテントをアプリから直接開いて、ユーザーにオンにするように求めることはできますか?

ここに画像の説明を入力

ありがとう

4

2 に答える 2

8

Google Cloud Messaging を参照していると仮定すると (android および push-notification タグを使用しているため)、GCM サービスを有効/無効にするために使用される一般的な設定はありません (iOS デバイス用の Apple プッシュ通知サービスとは異なります)。

アプリをインストールするときに、アプリが Google クラウド メッセージングを使用している場合は、このアプリが動作するために必要なアクセス許可のリストに表示されます。アプリのインストールを選択すると、プッシュ通知を送信できるようになります。

つまり、アプリが実際に GCM メッセージを受信するには、アプリをプログラムで GCM サービスに登録する必要があります。アプリ内の任意の場所でこれを行うことができapp settings、ユーザーが GCM を有効/無効にできるアクティビティ (またはフラグメントなど) を作成できます (これにより、GCM への登録/GCM からの登録解除がトリガーされます)。アプリには、GCM への登録時に受け取る登録 ID を保持する永続ストアを含めることができ、そのストアを使用して、アプリが GCM に登録されているかどうかを判断できます。

アプリが既に実行されている場合は、ユーザーにオンにするように依頼できます (それを行うコードがある場合)。アプリが実行されておらず、アプリがそのデバイスで GCM に登録されていない場合、サーバーは GCM メッセージをアプリに送信できません。

その障害を克服したい場合は、GCM に自動的に登録できます (アプリの初回起動時)。その後、いつでもアプリにメッセージを送信できます。これらの通知を表示するかどうかをユーザーに決定させたい場合は、GCM メッセージの受信の結果として作成する UI 通知を有効/無効にするフラグをアプリ設定に含めることができます。GCM サービスは常に有効になりますが、ユーザーが通知を表示することを選択しない限り、GCM メッセージが到着してもアプリは何も表示しません。

于 2013-06-04T14:49:43.327 に答える
3

システム プロセスを宣言するか、root 権限を持たない限り、このプロパティにアクセスすることはできません。まず、ファイルの権限を確認できます: /data/system/notifycaiton_policy.xml: -wr------。

または、/android/4.2/frameworks/base/services/java/com/android/server/NotificationManagerService.java のソース コードを参照してください。api:public void setNotificationsEnabledForPackage(String pkg, boolean enabled)では、呼び出し元の UID が次のようにチェックされますProcess.SYSTEM_UID

void checkCallerIsSystem() {
    int uid = Binder.getCallingUid();
    if (UserHandle.getAppId(uid) == Process.SYSTEM_UID || uid == 0) {
        return;
    }
    throw new SecurityException("Disallowed call for uid " + uid);
}
于 2013-08-27T01:46:18.657 に答える