我正在开发一个Android应用程序,它调用API来获取数据。现在我想在后台执行此任务,每次在列表视图中更改数据时,都应生成通知。
我怎样才能做到这一点?
如何在后台调用我的API以及如何生成通知。 我是服务和BroadcastReceivers的新手,所以请帮助我
我用这种方式调用服务:
startService(new Intent(this, MyService.class).putExtra("Background",true));
我创建此代码以进行测试。要检查是否可以在后台调用通知,即使应用已关闭。
我的服务类
public class MyService extends Service {
private Boolean isShowingNotification = true ;
NotificationManager notificationManager;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
if (intent.hasExtra("Background")) {
if (isShowingNotification) {
StopImportantJob();
stopSelf();
} else
DoImportantJob();
} else {
DisplayNotification("Now showing the demo");
}
return START_NOT_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Toast.makeText(this, "On Create Called", Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
super.onDestroy();
notificationManager.cancelAll();
}
public void DisplayNotification(String message){
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
Notification notification = new Notification.Builder(this)
.setContentTitle(message)
.setContentText("Touch to off Service")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent)
.setOngoing(false)
.build();
notificationManager.notify(0,notification);
}
public void DoImportantJob(){
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
Notification notification = new Notification.Builder(this)
.setContentTitle("New mail from " + "test@gmail.com")
.setContentText("Subject")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent)
.setOngoing(false)
.build();
startForeground(1992, notification);
isShowingNotification =true;
}
public void StopImportantJob(){
stopForeground(true);
isShowingNotification = false;
if(false){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ){
stopForeground(STOP_FOREGROUND_DETACH);
stopForeground(STOP_FOREGROUND_REMOVE);
}
}
}
}
我相信我应该做的事情如下所示,如果我错了,请纠正我。
答案 0 :(得分:0)
现在我想在后台执行此任务,每次数据都是 在列表视图中更改,应生成通知。怎么能 我实现了这个?如何在后台调用我的API,怎么做 我生成通知。
首先确定当您的应用程序位于Foreground
或Background
时是否需要此操作。现在,if Foreground
,您可能不想使用Service
类,而是使用AsyncTask
来进行Web服务调用,并在任务完成后生成通知并更新列表视图。 If Background
,您可以创建IntentService
并在那里进行API操作。但是,在后台模式下,您的应用程序无需收到通知,因为客户端无法看到您的应用程序。