服务中的位置侦听器发送通知问题

时间:2012-04-30 21:27:30

标签: android

我要做的是在位置发生变化时从服务中发送通知。当用户点击通知时,我希望通知关闭并开始活动。我设法发送通知,但是当点击通知时,它不会清除也不会启动活动。我无法看到我在哪里出错!?这是代码:

package com.oxinos.android.moc;

import android.app.Application;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.SimpleAdapter.ViewBinder;
import android.widget.Toast;


public class mocService extends Service implements OnClickListener{

    NotificationManager nm;
    static final int uniqueID1= 190910;
    PendingIntent pi;
    Context con;

    @Override
    public IBinder onBind(Intent intent) {

        return null;

    }

    @Override
    public void onCreate() {
        super.onCreate();
        con = getApplicationContext();

        Intent intent = new Intent(this, mocActivity2.class);

        pi = PendingIntent.getService(this, 0, intent, 0);
        nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

        // Acquire a reference to the system Location Manager
        LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

        // Define a listener that responds to location updates
        LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                // Called when a new location is found by the network location provider.
                String locStr = "New loc: "+location.getLatitude()+","+location.getLongitude();
                String title = "New MOC notification";

                Notification startupNotification = new Notification(R.drawable.ic_launcher, locStr, System.currentTimeMillis());
                startupNotification.setLatestEventInfo(con, title,locStr, pi);
                startupNotification.defaults = Notification.DEFAULT_ALL;
                nm.notify(uniqueID1, startupNotification);
                //nm.cancel(uniqueID1);

            }

            public void onProviderEnabled(String provider) {}

            public void onProviderDisabled(String provider) {}

            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
                // TODO Auto-generated method stub

            }
        };

        // Register the listener with the Location Manager to receive location updates
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100000, 50, locationListener);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100000 , 50, locationListener);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

    }

    @Override
    public void onStart(Intent intent, int startId) {

        super.onStart(intent, startId);

        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();

    }

    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        startActivity(new Intent(this, mocActivity2.class));
        nm.cancel(uniqueID1);
    }
}

任何想法???我做错了什么?

1 个答案:

答案 0 :(得分:0)

您正在使用PendingIntent创建getService()。如果您要使用PendingIntent开始活动,则需要使用getActivity()