Android: Метод AddProximityalert location ManagerAger не отправляет трансляцию
-
21-12-2019 - |
Вопрос
Я работаю над проектом Android, в котором я использую метод AddProximityalert, как вы уже знаете этот метод, позвольте вам установить оповещение о близости для местоположения, указанного по позиции (широту, долготе) и данным радиусом, и уведомитьВы, если вы так близко к нему.
Итак, я работал над этим на три дня назад, и я снова получал одинаковую проблему и снова ..
в bref: это мой простой код.
# Mainactivity.java
package com.example.proximityalert;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity implements LocationListener {
LocationManager lm;
//Defining Latitude & Longitude
double lat=37.422006 ,long1=-122.084095;
//Defining Radius
float radius=1000;
//Intent Action
String ACTION_FILTER = "com.example.proximityalert";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//i'm registering my Receiver First
registerReceiver(new ProximityReciever(), new IntentFilter(ACTION_FILTER));
//i'm calling ther service Location Manager
lm=(LocationManager) getSystemService(LOCATION_SERVICE);
//for debugging...
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this);
//Setting up My Broadcast Intent
Intent i= new Intent(ACTION_FILTER);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), -1, i, 0);
//setting up proximituMethod
lm.addProximityAlert(lat, long1, radius, -1, pi);
}
@Override
//just For debugging to See the distance between my actual position and the aproximit point
public void onLocationChanged(Location newLocation) {
Location old = new Location("OLD");
old.setLatitude(lat);
old.setLongitude(long1);
double distance = newLocation.distanceTo(old);
Log.i("MyTag", "Distance: " + distance);
}
@Override
public void onProviderDisabled(String arg0) {}
@Override
public void onProviderEnabled(String arg0) {}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}
.
# proximityreceiver.java
package com.example.proximityalert;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.util.Log;
import android.widget.Toast;
public class ProximityReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Key for determining whether user is leaving or entering
String key = LocationManager.KEY_PROXIMITY_ENTERING;
//Gives whether the user is entering or leaving in boolean form
boolean state = intent.getBooleanExtra(key, false);
if(state){
// Call the Notification Service or anything else that you would like to do here
Log.i("MyTag", "Welcome to my Area");
Toast.makeText(context, "Welcome to my Area", Toast.LENGTH_SHORT).show();
}else{
//Other custom Notification
Log.i("MyTag", "Thank you for visiting my Area,come back again !!");
Toast.makeText(context, "Thank you for visiting my Area,come back again !!", Toast.LENGTH_SHORT).show();
}
}
}
.
* # проблема заключается в том, когда я запускаю программу, ведро (Proximityreciever) никогда не вызывал системой, даже если я очень близко к точке проксимита, и даже если отладчик показывает мне это расстояние между двумя местамисоставляет <1000 м: /
Решение
Я только что выяснил что-то по этому вопросу, и почему адпроксимеритирТалерт знаки не работает, я разделяю это с тобой, потому что я заметил, что некоторые люди задавали один и тот же вопрос раньше, и они не получают никакого ответа! .
Ответ был просто передо мной, но я не обратил на него внимания, поэтому, когда я читал документацию Official Android ( Здесь ) Я видел это предложение" Из-за приближенного характера оценки положения, если устройство проходит через данную область, вполне возможно, что не будет уволено никаких намерений "
Что это значит? Это означает, что когда вы тестируете свое приложение на AVD, и вы отправляете GPS координаты (широта, долгота) от DDMS, чтобы AVD его очень трудно Имитация реального аспекта GPS, (потому что в первую очередь вы выбираете некоторую точку, чтобы быть вашим проксимом и сразу после того, как вы выбираете пункт антора очень далеко от Proximpoint, чтобы увидеть, если его работа) и это не то, что это происходит с реальным устройство.
Так что решение для проверки вашего приложения на реальном устройстве или с DDMS, попытайтесь очень медленно изменить констеры, пока вы не хотите в зоне.