简体   繁体   中英

Android PendingIntent for foreGround Service

I am still thoroughly confused by starting a service in the foreground.

Currently: I have an activity that starts a service in the background to perform stats on sensor data+gps data. It keeps getting killed, so I started it in the foreground. Works fine. However when I touch on the notification icon in the status bar it seems to start a new activity (which I did state in the Pending Intent).

So in a nutshell I am still confused with the whole thing. I would like an activity to start a service in the foreground, and when you click on the notification bar it brings the existing activity that started the service to the front.

Here is some code within the activity (currently set PendingIntent to null):

private ServiceConnection mConnection = new ServiceConnection() {
     public void onServiceConnected(ComponentName className, IBinder service) {
        // This is called when the connection with the service has been
        // established, giving us the service object we can use to
        // interact with the service. Because we have bound to a explicit
        // service that we know is running in our own process, we can
        // cast its IBinder to a concrete class and directly access it.

        cycleDataService = ((CycleDataProService.LocalBinder) service)
                .getService();
        //Todo the notification bullshaite here...
        String ns = Context.NOTIFICATION_SERVICE;
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
        int icon = R.drawable.icon;
        CharSequence tickerText = "Hello";
        long when = System.currentTimeMillis();
        Notification notification = new Notification(icon, tickerText, when);
        Context context = getApplicationContext();
        CharSequence contentTitle = "My notification";
        CharSequence contentText = "Hello World!";          
        //Intent notificationIntent = new Intent(cycleDataService, CycleDataProService.class);
        //PendingIntent contentIntent = PendingIntent.getActivity(context, 0, myOwnIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        PendingIntent pi = PendingIntent.getActivity(context, 0, null, 0);

        //PendingIntent contentIntent = PendingIntent.getActivity(context, 0, , 0);
        notification.setLatestEventInfo(context, contentTitle, contentText, pi);
        mNotificationManager.notify(HELLO_ID, notification);
        cycleDataService.startForeground(HELLO_ID, notification);
        /*cycleDataService.startService(new Intent(cycleDataService,
                CycleDataProService.class));*/
        serviceIsRunning = true;
        // Tell the user about this for our demo.
        // Toast.makeText(Binding.this, R.string.local_service_connected,
        // Toast.LENGTH_SHORT).show();
    }

use this way:

Intent notificationIntent = new Intent(context, YourActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
    notification.contentIntent = contentIntent;
    notification.setLatestEventInfo(context, "title", null, contentIntent);

Use FLAG_ACTIVITY_SINGLE_TOP if you want your activity to continue, and not restart.

Intent notificationIntent = new Intent(context, YourActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;
notification.setLatestEventInfo(context, "title", null, contentIntent);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM