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

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

ただいまの
回答率

88.03%

ステータスバーの通知アイコンが変更できない

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 5,693

score 106

表記の件につきまして質問致します。
CordovaでAndroidアプリのサーバから端末へのプッシュ通知をする機能を用意しておりますが、ステータスバーの通知アイコンの変更ができません。

javaの知識は殆どありませんが、調べた限りだと
setSmallIcon(context.getApplicationInfo().icon)
で失敗しているのではと以下のログから推測する次第です。

09-11 21:06:44.059: W/IInputConnectionWrapper(26298): showStatusIcon on inactive InputConnection

この原因調査や、対応方法について情報がありましたら、何卒ご教授をお願い致します。

補足資料になりますが、以下にsetSmallIcon を指定しているメソッドを記します。

    public void createNotification(Context context, Bundle extras)
    {
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        String appName = getAppName(this);

        Intent notificationIntent = new Intent(this, PushHandlerActivity.class);
        notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        notificationIntent.putExtra("pushBundle", extras);

        int requestCode = new Random().nextInt();
        PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        
        int defaults = Notification.DEFAULT_ALL;

        if (extras.getString("defaults") != null) {
            try {
                defaults = Integer.parseInt(extras.getString("defaults"));
            } catch (NumberFormatException e) {}
        }
        
        NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context)
                .setDefaults(defaults)
                .setSmallIcon(context.getApplicationInfo().icon)
                .setWhen(System.currentTimeMillis())
                .setContentTitle(extras.getString("title"))
                .setTicker(extras.getString("title"))
                .setContentIntent(contentIntent)
                .setAutoCancel(true);

        String message = extras.getString("message");
        if (message != null) {
            mBuilder.setContentText(message);
        } else {
            mBuilder.setContentText("<missing message content>");
        }

        String msgcnt = extras.getString("msgcnt");
        if (msgcnt != null) {
            mBuilder.setNumber(Integer.parseInt(msgcnt));
        }
        
        int notId = 0;
        
        try {
            notId = Integer.parseInt(extras.getString("notId"));
        }
        catch(NumberFormatException e) {
            Log.e(TAG, "Number format exception - Error parsing Notification ID: " + e.getMessage());
        }
        catch(Exception e) {
            Log.e(TAG, "Number format exception - Error parsing Notification ID" + e.getMessage());
        }

        // notId が無い場合は重複するので乱数から生成
        if (notId == 0) {
            notId = new Random().nextInt(100000);
            Log.d(TAG, "Generated random notId: " + notId);
        } else {
            Log.d(TAG, "Received notId: " + notId);
        }

        mNotificationManager.notify((String) appName, notId, mBuilder.build());
    }

以下、プッシュ通知を端末が受信した際のログになります。

x109-11 21:07:07.056: V/GCMBroadcastReceiver(26298): onReceive: com.google.android.c2dm.intent.RECEIVE
09-11 21:07:07.057: V/GCMBroadcastReceiver(26298): GCM IntentService class: com.plugin.gcm.GCMIntentService
09-11 21:07:07.057: V/GCMBaseIntentService(26298): Acquiring wakelock
09-11 21:07:07.066: V/GCMBaseIntentService(26298): Intent service name: GCMIntentService-GCMIntentService-2
09-11 21:07:07.072: D/GCMIntentService(26298): onMessage - context: android.app.Application@1a33275f
09-11 21:07:07.077: E/GCMIntentService(26298): Number format exception - Error parsing Notification ID: Invalid int: "null"
09-11 21:07:07.078: D/GCMIntentService(26298): Generated random notId: 49777
09-11 21:07:07.201: V/GCMBaseIntentService(26298): Releasing wakelock
09-11 21:07:15.697: I/chromium(26298): [INFO:CONSOLE(25)] "No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.", source: file:///android_asset/www/plugins/cordova-plugin-whitelist/whitelist.js (25)



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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

プッシュ通知は受け取れているのですよね?
setSmallIcon(context.getApplicationInfo().icon)
で通知するときのアイコンを指定しています。
このままだと、アプリで設定されたiconにります。
通知するときに使用したいicon画像はありますでしょうか?
その画像を
project/res/drawable/ フォルダ以下
または
project/res/mipmap/ フォルダ以下
においてください。(Android StudioやEclipseによってpathは違います)
(最近のAndroidならmipmap推奨です。また、mipmap-hdpiみたいなフォルダがありますが、これらのフォルダ以下にサイズの異なる画像を指定することで、Androidの端末に合わせて表示する画像を変えてくれるものなので、端末に合わせたサイズの画像を指定したい場合はこちらにいれてください。端末いぞさせなくていい場合はmipmap-nodpiフォルダにおいてください)

画像をフォルダにおいたら、
setSmallIcon(R.drawable.<拡張子抜きのファイル名>)
または
setSmallIcon(R.mipmap.<拡張子抜きのファイル名>)
というものが指定できるようになっているはずなので、これを指定すればiconを変更できます。
(例えば: setSmallIcon(R.mipmap.icon))

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る