运行 Android 应用关闭时的通知 GCM/Firebase
Run Android Notifications when App is closed without GCM/Firebase
我正在开发一个应用程序,我想在其中显示推送通知。请注意,由于我的客户要求不使用任何第三方服务,因此使用 GCM/Firebase 是不可能的。
我可以使用以下代码成功显示来自服务的通知。
public class SendNotificationService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
CharSequence title = "Notification Title";
CharSequence message = "This is a test notification.";
Drawable drawable= ContextCompat.getDrawable(this,R.drawable.brand_icon_color);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.brand_icon_small_color)
.setLargeIcon(bitmap)
.setAutoCancel(true)
.setContentTitle(title)
.setOngoing(false);
mBuilder.setContentText(message);
mBuilder.setTicker(message);
mBuilder.setWhen(System.currentTimeMillis());
NotificationManager notificationManager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(), 0);
mBuilder.setContentIntent(pendingIntent);
notificationManager.notify(0, mBuilder.build());
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Toast.makeText(this, "Notifications Stopped...", Toast.LENGTH_LONG).show();
}
}
我正在通过我的 AsyncTask onPostExecute 方法启动此服务。
Intent intentService = new Intent(context, SendNotificationService.class);
context.startService(intentService);
我根据一些教程创建了这个,发现如果我转到 Android 设置中的 运行 应用程序,我将能够看到此服务 运行。但我无法找到任何此类服务。
现在的问题是当我关闭我的应用程序时,通知也消失了。我希望它一直保留到用户采取任何操作为止。
除此之外,我希望此服务在 phone 启动时启动,即使应用程序未启动也是如此。
1) 将权限添加到清单中:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2) 在启动时将接收器添加到 运行 的清单:
<receiver android:name="com.example.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
在MyBroadcastReceiver.java中:
package com.example;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent startServiceIntent = new Intent(context, MyService.class);
context.startService(startServiceIntent);
}
}
我正在开发一个应用程序,我想在其中显示推送通知。请注意,由于我的客户要求不使用任何第三方服务,因此使用 GCM/Firebase 是不可能的。
我可以使用以下代码成功显示来自服务的通知。
public class SendNotificationService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
CharSequence title = "Notification Title";
CharSequence message = "This is a test notification.";
Drawable drawable= ContextCompat.getDrawable(this,R.drawable.brand_icon_color);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.brand_icon_small_color)
.setLargeIcon(bitmap)
.setAutoCancel(true)
.setContentTitle(title)
.setOngoing(false);
mBuilder.setContentText(message);
mBuilder.setTicker(message);
mBuilder.setWhen(System.currentTimeMillis());
NotificationManager notificationManager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(), 0);
mBuilder.setContentIntent(pendingIntent);
notificationManager.notify(0, mBuilder.build());
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Toast.makeText(this, "Notifications Stopped...", Toast.LENGTH_LONG).show();
}
}
我正在通过我的 AsyncTask onPostExecute 方法启动此服务。
Intent intentService = new Intent(context, SendNotificationService.class);
context.startService(intentService);
我根据一些教程创建了这个,发现如果我转到 Android 设置中的 运行 应用程序,我将能够看到此服务 运行。但我无法找到任何此类服务。
现在的问题是当我关闭我的应用程序时,通知也消失了。我希望它一直保留到用户采取任何操作为止。
除此之外,我希望此服务在 phone 启动时启动,即使应用程序未启动也是如此。
1) 将权限添加到清单中:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2) 在启动时将接收器添加到 运行 的清单:
<receiver android:name="com.example.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
在MyBroadcastReceiver.java中:
package com.example;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent startServiceIntent = new Intent(context, MyService.class);
context.startService(startServiceIntent);
}
}