2014-03-19 95 views
1

我知道很多人問這個問題,但我感到無助,因爲我嘗試了我所知道的一切,但仍然無法正常工作。Android感應警報不起作用

我提供了我最後一次嘗試過的代碼,之後它沒有工作過。

public class ProximityAlertActivity extends Activity { 

private static final long POINT_RADIUS = 100; // in Meters 
private static final long PROX_ALERT_EXPIRATION = -1; // It will never expire 
private static final String PROX_ALERT_INTENT = "com.androidmyway.demo.ProximityAlert"; 
private LocationManager locationManager; 
private EditText latitudeEditText; 
private EditText longitudeEditText; 
private Button addAlertButton; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_proxymity); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     latitudeEditText = (EditText) findViewById(R.id.point_latitude); 
     longitudeEditText = (EditText) findViewById(R.id.point_longitude); 
     addAlertButton = (Button) findViewById(R.id.add_alert_button); 

     addAlertButton.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        addProximityAlert(); 
       } 
     }); 

} 

private void addProximityAlert() { 

     double latitude = Double.parseDouble(latitudeEditText.getText().toString()); 
     double longitude = Double.parseDouble(longitudeEditText.getText().toString()); 
     Intent intent = new Intent(PROX_ALERT_INTENT); 
     PendingIntent proximityIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
     locationManager.addProximityAlert(
       latitude, // the latitude of the central point of the alert region 
       longitude, // the longitude of the central point of the alert region 
       POINT_RADIUS, // the radius of the central point of the alert region, in meters 
       PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no       expiration 
       proximityIntent // will be used to generate an Intent to fire when entry to or exit from the alert region is detected 
     );  
} 

/******廣播接收器以顯示通知******/

public class ProximityIntentReceiver extends BroadcastReceiver { 
    private static final int NOTIFICATION_ID = 1000; 

    @SuppressWarnings("deprecation") 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String key = LocationManager.KEY_PROXIMITY_ENTERING; 
     Boolean entering = intent.getBooleanExtra(key, false); 
     if (entering) { 
       Log.d(getClass().getSimpleName(), "entering"); 
      }else { 
       Log.d(getClass().getSimpleName(), "exiting"); 
      } 
      NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

      Intent notificationIntent = new Intent(context, ProximityAlertActivity.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
      Notification notification = createNotification(); 
      notification.setLatestEventInfo(context, "Proximity Alert!", "You are near your point of interest."+key, pendingIntent); 

      notificationManager.notify(NOTIFICATION_ID, notification); 
    } 

    private Notification createNotification() { 
      Notification notification = new Notification(); 
      notification.icon = R.drawable.ic_launcher; 
      notification.when = System.currentTimeMillis(); 
      notification.flags |= Notification.FLAG_AUTO_CANCEL; 
      notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
      notification.defaults |= Notification.DEFAULT_ALL; 
      notification.defaults |= Notification.DEFAULT_LIGHTS; 
      notification.ledARGB = Color.WHITE; 
      notification.ledOnMS = 1500; 
      notification.ledOffMS = 1500; 
      return notification; 
    } 

}

/****** ***** manifest資源配置文件*/

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.androidmyway.demo.proxymityalert" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> 

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


<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Black.NoTitleBar" > 
    <activity 
     android:name=".ProximityAlertActivity" 
    > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name="com.androidmyway.demo.proxymityalert.ProximityIntentReceiver" 
       android:exported="false" 
       android:enabled="true" > 
     <intent-filter> 
      <action android:name="com.androidmyway.demo.ProximityAlert" /> 
     </intent-filter> 

    </receiver> 

</application> 

請給我,那工作解決方案。謝謝。

回答

0

PROX_ALERT_INTENT =「com.androidmyway.demo.ProximityAlert」;

此字符串必須是觸發proximit警報時要觸發的活動的名稱。但在我們的文件中,我無法看到任何具有給定名稱的活動。 請ou請覈對此字符串的值嗎?

+0

不需要是一項活動。 https://www.javacodegeeks.com/2011/01/android-proximity-alerts-tutorial.html – devprashant

0

代碼看起來很好不知道你如何測試,如果你使用任何假的GPS測試它將無法正常工作。