代码之家  ›  专栏  ›  技术社区  ›  Feroz Siddiqui

Android应用后台24/7通知侦听器从api级别16到api级别28的运行与实现

  •  0
  • Feroz Siddiqui  · 技术社区  · 6 年前

    我正在尝试实现一个长期运行的android服务,不管应用程序是否在运行,它都会一直运行。Bu当我在Android pie verson中关闭应用程序时,此服务将被终止

    以下是我的服务代码:

     public class LocationNotificator extends Service {
            private static int FOREGROUND_ID = 1338;
    
            public LocationNotificator() {
            }
    
            public int onStartCommand(Intent intent, int flags, int startId) {
                Log.d("Location checker", "Service running");
        //My code is here
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
                    startMyOwnForeground();
                else
                    startForeground(FOREGROUND_ID,
                            buildForegroundNotification("abc"));
                stopForeground(true);
                return START_STICKY;
            }
    
            @Override
            public IBinder onBind(Intent intent) {
                // TODO: Return the communication channel to the service.
                throw new UnsupportedOperationException("Not yet implemented");
            }
    
            private Notification buildForegroundNotification(String filename) {
                NotificationCompat.Builder b = new NotificationCompat.Builder(this);
    
                b.setOngoing(true);
    
                b.setContentTitle("Some Title")
                        .setContentText("some File name")
                        .setSmallIcon(android.R.drawable.stat_sys_download)
                        .setTicker("downloading");
    
                return (b.build());
            }
    
            @RequiresApi(api = Build.VERSION_CODES.O)
            private void startMyOwnForeground() {
                String NOTIFICATION_CHANNEL_ID = "com.example.simpleapp";
                String channelName = "My Background Service";
                NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
                chan.setLightColor(Color.BLUE);
                chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
                NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                assert manager != null;
                manager.createNotificationChannel(chan);
    
                NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
                Notification notification = notificationBuilder.setOngoing(true)
                        .setSmallIcon(R.mipmap.talentify_logo_red)
                        .setContentTitle("App is running in background")
                        .setPriority(NotificationManager.IMPORTANCE_MIN)
                        .setCategory(Notification.CATEGORY_SERVICE)
                        .build();
                startForeground(2, notification);
            }
        }
    

    我希望这项服务能长期运行我应该如何使这项服务长期运行

    0 回复  |  直到 6 年前