在应用程序关闭

时间:2016-09-22 08:12:02

标签: android android-intent notifications alarmmanager android-context

这是我的代码。如果我在一个单独的Android工作室项目中使用它,它工作正常。但是,当我将代码集成到另一个项目时,它会导致问题。 如果应用程序已打开,我可以收到通知。但是在应用关闭时,不会收到通知。

此外,我发现了一件事 - 我在1:10(让我们说)发出警报并关闭,然后在1.09重新打开应用程序。我收到了1.10的通知!!

我无法确定发生了什么。请告诉我,即使我犯了愚蠢的错误,谢谢。

public class BroadCast {

public void broadcastIntent(int selected, Context context, long userMilli) {
    Intent intent = new Intent(context.getApplicationContext(), ReminderReceiver.class);
    Bundle bundle = new Bundle();
    bundle.putInt("selected", selected);
    intent.putExtras(bundle);
    intent.setAction("android.media.action.DISPLAY_NOTIFICATION");
    intent.addCategory("android.intent.category.DEFAULT");

    Calendar calendar = Calendar.getInstance();
    long curMilli = calendar.getTimeInMillis();

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), selected, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    if(Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
        alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + (userMilli-curMilli), pendingIntent);
    else
        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + (userMilli-curMilli), pendingIntent);
}
}

以上代码使用intent创建broadcastalarmManager

public class ReminderReceiver extends BroadcastReceiver {

public ReminderReceiver() {
}

@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    int selected = bundle.getInt("selected");
    sendNotification(context, selected);
}

private void sendNotification(Context context, int selected) {
    String notificationContentText = "String to display";

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

    builder.setSmallIcon(R.drawable.alarm)
            .setContentTitle("Title")
            .setPriority(Notification.PRIORITY_MAX)
            .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
            .setContentText(notificationContentText)
            .setColor(Color.rgb(58,95,205));

    notificationManager.notify(selected, builder.build());
}
}

以上代码构建通知

这是我的AndroidManifest文件

    <receiver
        android:name=".ReminderReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.media.action.DISPLAY_NOTIFICATION"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

1 个答案:

答案 0 :(得分:0)

这不是BroadcastReceiver或服务的问题。我不得不在手机中更改通知设置。我使用华硕,你必须检查电源管理选项。如果它处于省电模式,则应用关闭时会拒绝通知。