2012-07-09 93 views
2

我寫了下面的代碼,但它不工作。有誰能夠幫助我?我只想被動地接收GPS狀態變化,而不是主動詢問。節約能源是最重要的。當GPS狀態發生變化時,如何接收系統廣播?

沒有消息輸出。

package com.sharelbs.lbs.service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class GPStStatusReceiver extends BroadcastReceiver { 
    public static final String GPS_ENABLED_CHANGE_ACTION = "android.location.GPS_ENABLED_CHANGE"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("---------log--------","GPS Status onReceive"); 
     if(intent.getAction().equals(GPS_ENABLED_CHANGE_ACTION)){ 
     Log.d("---------log--------","GPS Status Changed"); 
     startMyProgram(); 
     } 
    } 
} 

這裏是我的Manifest.xml:

<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<receiver android:name=".service.GPStStatusReceiver"> 
    <intent-filter> 
    <action android:name="android.location.GPS_ENABLED_CHANGE" /> 
    </intent-filter> 
</receiver> 

回答

7

我相信你只是指向清單中的錯誤的位置,改變接收者的姓名:

<receiver android:name=".GPStStatusReceiver"> 

這種類型的接收器非常適合在GPS啓用時啓動應用程序,但在應用程序運行時,即使刷新間隔設置爲10,LocationListener的onProviderEnabled()或onProviderDisable()也會捕獲這些應用程序天和1000英里,或更多。因此,如果將大量設置傳遞給requestLocationUpdates()方法,則不一定會浪費電池電量。

加成從評論

我只能猜測,你是不是收到GPS_ENABLED_CHANGE因爲你不是觸發位置請求。單擊位置菜單中的複選框即可啓用GPS功能,但不會廣播此Intent,某些應用程序必須請求當前位置。此外,我沒有找到任何有關此意向的官方文件,這意味着Android might change or remove this at any time

也許你想要官方支持的LocationManager.PROVIDERS_CHANGED_ACTION,當GPS提供者(和其他提供者)被啓用/禁用時,這將廣播Intent。

<action android:name="android.location.PROVIDERS_CHANGED" /> 
+0

我的路徑是正確的。 android:name =「。service.GPStStatusReceiver」。它不起作用。 – tristan 2012-07-10 11:16:34

+1

@tristan我更新了我的答案。 – Sam 2012-07-10 17:06:55

+0

非常感謝你!!!!!你是我的英雄! – tristan 2012-07-11 09:33:10

相關問題