8

ウェブサイトのデータをスクレイピングし、必要に応じてユーザーに通知するサービスがあります。

私が抱えている問題は、サービスが閉じるとすぐに通知が消えることです (これは即座に発生する可能性があります)。以下のコードは、アプリが持つすべての通知コードです。通知をキャンセルするためのコードは入れていません。

public static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx)
{
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link));
    PendingIntent contentIntent = PendingIntent.getActivity(ctx.getApplicationContext(), 0, notificationIntent, 0);

    NotificationManager nm = (NotificationManager) ctx
            .getSystemService(Context.NOTIFICATION_SERVICE);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx);
    Resources res = ctx.getResources();

    builder.setContentIntent(contentIntent)
                .setSmallIcon(R.drawable.notify_icon)
                .setWhen(System.currentTimeMillis())
                .setContentTitle(title)
                .setContentText(text)
                .setAutoCancel(false);

    Notification n = builder.getNotification();

    nm.notify(notificationID, n);
}

それが違いを生む場合(そうではないことは確かです)、私はここでアプリケーションコンテキストを使用しています。

私のサービスは定期的に開始され、Web サイトを処理し、必要に応じて通知してから閉じます。

サービスの最後に、stopSelf() を呼び出す代わりに、30 秒ほどスリープしてから stopSelf() を呼び出します。その後、通知は 30 秒間表示された後、消えます。通知が消えた時点で、関連するものが logcat に表示されません。

これまでのところ、ICS を使用してテストすることしかできませんでした。

4

4 に答える 4

4

投稿したコードは機能します。jbのアクティビティとサービスの両方からテストしましたが、コンポーネントが停止しても通知は残ります。プロセスを強制終了でき、通知が残ることも確認しました。アプリを削除して、問題が解決するかどうかを確認してください。具体的には、通知で誤ってキャンセルを呼び出していないことを確認してください。

于 2012-09-06T20:38:46.207 に答える
2

最初に開発者マニュアルを確認するのを忘れたようです。ここhttp://developer.android.com/guide/topics/ui/notifiers/notifications.htmlを参照して、FLAG_ONGOING_EVENTフラグとFLAG_NO_CLEARフラグを探してください。

これまでのところ、ICSを使用してテストすることしかできませんでした。

そのため、シミュレータは非常に便利です。それを試してみてください。SDKの一部です。

于 2012-07-17T11:48:32.203 に答える
1

同じデバイスで古い方法を試して、同じように動作するかどうか教えてください:

private static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager) ctx.getSystemService(ns);
    Notification notification = new Notification(R.drawable.notify_icon, title, System.currentTimeMillis());
    notification.flags = Notification.FLAG_AUTO_CANCEL;
    PendingIntent contentIntent;
    Bundle bundle = new Bundle();
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link));
    contentIntent = PendingIntent.getActivity(ctx, notificationID,
                notificationIntent, 0);
    notification.setLatestEventInfo(ctx, title, text,
            contentIntent);
    mNotificationManager.notify(notificationID, notification);
}
于 2012-09-12T03:51:19.910 に答える