2014-01-24 36 views
0

我需要获取位置更新形式onReceive方法。当onReceive()调用GPS开始2-3秒后,为什么?从BOOT_COMPLETED Receiver请求位置更新?

如何解决?我想获取位置更新。请帮助。

注:的onReceive方法被称为重新启动我的手机时

Java代码:

public class BootReceiver extends BroadcastReceiver implements LocationListener { 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 


    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) 
{ 
    LocationManager LM2=(LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    LM2.requestLocationUpdates("gps",5000, 0, this); 
} 

} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

} 

的Manifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

<receiver android:name="com.my.package.BootReceiver"> 
     <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
</intent-filter> 
+1

,因为广播接收器是短暂的。改为使用服务。 – njzk2

+0

thanx bro。这真的很有用:) – Yousif

回答

-1

当的的onReceive()调用GPS开始2-3秒后,为什么?

因为您的过程已终止。

+0

好的。如何解决它? 请填写您的答案 – Yousif

1

感谢名单球员的帮助,我只需要做出Service

的的onReceive方法将

@Override 
public void onReceive(Context context, Intent intent) { 

    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) 
    { 
    Intent i= new Intent(context, MyService.class);    
    context.startService(i); 
    } 

} 

为MyService类

public class MyService extends Service implements LocationListener { 


    @Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

     @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
    //TODO do something useful 
    LocationManager LM2=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    LM2.requestLocationUpdates("gps",5000, 0, this); 
    return Service.START_STICKY; 
    } 


    @Override 
public void onLocationChanged(Location location) { 
// TODO Auto-generated method stub 

} 

@Override 
public void onProviderDisabled(String provider) { 
// TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
// TODO Auto-generated method stub 

} 

@Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
// TODO Auto-generated method stub 

} 

} 

,我需要登记自己的服务在manifest.xml中

<service 
android:name="com.my.package.MyService" 
android:icon="@drawable/icon" 
android:label="Service name" 
> 
</service>