2013-11-15 54 views
1

我試圖建立接近以下警報是我的代碼,但在所有Android的接近警戒不點火

Intent intent = new Intent(ACTION_PROXIMITY_ALERT); 
pendingIntent = PendingIntent.getBroadcast(GMapsActivity.this, 0, intent, 0); 
locationManager.addProximityAlert(mNavigationDatas.get(CURRENT_INDEX).startCordinates.latitude, 
         mNavigationDatas.get(CURRENT_INDEX).startCordinates.longitude, 100f, -1, pendingIntent); 
IntentFilter filter = new IntentFilter(ACTION_PROXIMITY_ALERT); 
registerReceiver(new ProximityBroadcastListener(), filter); 

權限它不是射擊如下

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

我送模擬位置在真實設備上測試Android v4.1.2模擬位置遵循正確的路徑,但不會調用廣播監聽器

public class ProximityBroadcastListener extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     final String key = LocationManager.KEY_PROXIMITY_ENTERING; 
     final Boolean entering = intent.getBooleanExtra(key, false); 

     if (entering) { 
      String instruction = mNavigationDatas.get(CURRENT_INDEX).drivingInstuctions; 
      instruction = instruction.replaceAll("<[^>]*>", ""); 
      Log.e("", instruction); 
      tts.speak(instruction, TextToSpeech.QUEUE_FLUSH, null); 
      Toast.makeText(context, "entering", Toast.LENGTH_SHORT).show(); 
     } else { 
      locationManager.removeProximityAlert(pendingIntent); 
      CURRENT_INDEX++; 
      locationManager.addProximityAlert(mNavigationDatas.get(CURRENT_INDEX).startCordinates.latitude, 
        mNavigationDatas.get(CURRENT_INDEX).startCordinates.longitude, 100f, -1, pendingIntent); 
      Toast.makeText(context, "exiting", Toast.LENGTH_SHORT).show(); 
     } 
    } 

謝謝 Saurabh

+0

您可以在發送模擬位置時附加日誌嗎? – iago

+0

我使用相同的座標模擬位置,我用來顯示路線和myLocation指針移動相同的路徑,我通過另一個應用程序發送模擬位置 – ingsaurabh

+0

當通過另一個應用程序發送模擬位置是註冊的監聽程序或它當這個應用程序在後臺進行取消註冊? – iago

回答

2

首先,我建議在添加接近警報之前註冊BroadcastReceiver。如果您的設備已經在該位置,則可能會在您的接收機準備好收聽之前觸發該設備。

您可能還想通過手動觸發PendingIntent來檢查您的接收器是否已正確註冊,例如通過AlarmManager,通知或只需按下按鈕。

如果這些都不起作用,請考慮嘗試使用物理設備,因爲模擬器上的位置事件存在一些問題。例如,due to a bug in the emulator,傳入位置的時間偏移設置爲午夜,因此您的位置條件可能與其不匹配。