Android Broadcast Receiver自动终止,无需执行整个任务

时间:2017-02-05 09:46:05

标签: android broadcastreceiver

我希望在使用广播接收器启动后获得位置坐标。但是我的代码不能工作很多次(仅工作很少次)。应用程序不等待位置管理器获取坐标。请帮助我。提前致谢。这是我的代码

`LocationManager lm=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
        Toast.makeText(context,"location listner",Toast.LENGTH_SHORT).show();
        LocationListener ll=new LocationListener() {
            @Override

            public void onLocationChanged(Location location) {

                if(co<=0) {
                    double la=location.getLatitude();
                    double lo=location.getLongitude();
                    try {
                        SmsManager sms=SmsManager.getDefault();
                        Toast.makeText(context,"lat "+lo+" lon "+la,Toast.LENGTH_LONG).show();
                        co++;
                        sms.sendTextMessage(number,null,"Langitude "+la+" lattitude "+lo ,null,null);

                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            @Override
            public void onProviderEnabled(String provider) {
                Location location=new Location(LocationManager.GPS_PROVIDER);


            }

            @Override
            public void onProviderDisabled(String provider) {


            }
        };
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,100,0,ll);

    Toast.makeText(context,"went out .....",Toast.LENGTH_SHORT).show();

}`

1 个答案:

答案 0 :(得分:0)

只要paste方法正在执行,BroadcastReceiver只有一个生命周期。该方法返回后,它不再存在,并且提供给它的onReceive对象不再有效。因此,注册像Context这样的异步回调将无法可靠地运行。我真的很惊讶它有效。

相反,请使用LocationListener启动BroadcastReceiver并让Service注册Service的监听器。 LocationManager将保持不变,直到显式停止或系统因内存压力而导致死亡。