3

次のコードは、HONEYCOMB+ を実行しているデバイスで正常に動作することが確認されています。ただし、Samsung Galaxy Y では、通知が生成されません。

        String tickerText = userString + " Download Queued";
        Notification notification =  new NotificationCompat.Builder(this).setAutoCancel(true)
                                                .setContentTitle(userString)
                                                .setContentText("Queued")
                                                .setSmallIcon(R.drawable.stat_sys_download_done)
                                                .setWhen(System.currentTimeMillis())
                                                .setTicker(tickerText)
                                                .build();
        if(DBG_ENABLE) {
            LogUtils.logD(TAG_LOG, "Posting queue notification : " + 0);
        }
        NotificationManager notificationManager =
                (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(0, notification);

ノート :

  • ログに「投稿キュー通知」が表示されます。
  • Android SDK からドローアブルstat_sys_download_doneをプロジェクトにコピーしました。

この問題をデバッグする方法を考えることができません。欠けているものがあるかどうかはわかりません。これを修正するための提案は大歓迎です。

4

3 に答える 3

9

CommonsWare が提案したように、2.3 エミュレーターでアプリを実行したところ、クラッシュしました。理由は ContentIntent が設定されていませんでした。GingerBread は ContentIntent を期待しています。そこで、次のようなダミーの保留中のインテントを追加しました。

            PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);
            Notification notification =  new NotificationCompat.Builder(this).setAutoCancel(true)
                                            .setContentTitle(userString)
                                            .setContentText("Queued")
                                            .setContentIntent(pi)
                                            .setSmallIcon(R.drawable.stat_sys_download_done)
                                            .setWhen(System.currentTimeMillis())
                                            .setTicker(tickerText)
                                            .build();
于 2013-02-21T21:30:49.057 に答える
0

y0u はこれも実行できます。2.3 および 2.3+ で動作します

 Notification notification = new NotificationCompat.Builder(this)
        .setTicker("new notification")
        .setContentTitle("title")
        .setContentText("hello").setSmallIcon(R.drawable.ic_launcher)
        .setContentIntent(pendingIntent)
    .addAction(android.R.drawable.ic_media_play, "play",pendingIntent).build();
于 2014-02-04T09:38:44.233 に答える
0

上記の解決策を試したところ、示されているように空の PendingIntent を宣言するだけでアプリがクラッシュしました。この通知を BroadcastListener でコーディングしているため、スコープに問題があると判断し、保留中のインテントをリスナーの onReceive メソッドに移動し、ダミーの代わりに着信コンテキストとインテントを使用しました。それは私の 2.3.6 Galaxy 電話で完全に動作します。これが私のコードです:

BroadcastReceiver sitInReceiver = new BroadcastReceiver() {
        @Override
            public void onReceive(Context context, Intent intent) {
                String target = intent.getStringExtra("target");
                ....
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            notifB.setContentIntent(pi);

            NotificationManager mNotificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            int nmId=1;
                // mId allows you to rewrite the same the notification or make a different one.
            mNotificationManager.notify(nmId, notifB.build());
        }

すべての非動的データが宣言されているリスナーの外側で、ビルダー notifB を宣言したことに注意してください。

NotificationCompat.Builder notifB = new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_launcher) 
    .setAutoCancel(true);
于 2014-04-30T14:17:33.840 に答える