我想在他靠近特定位置时提醒用户。为此,我在我的应用程序中包含了ProxmityAlert和相应的服务。但无论我给出什么样的坐标,它总是向我显示“感谢您访问我的区域!!进入”我这样做是错误的吗?
我就是这样做的:
public class ProxTest extends Activity {
LocationManager lm;
double lat = 30.085514, long1 = 77.082603;
float radius = 50;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
Intent i = new Intent();
i.setAction("com.example.test.proximityalert");
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(),
-1, i, 0);
lm.addProximityAlert(lat, long1, radius, -1, pi);
sendBroadcast(i);
System.out.println("Prox alert added ");
}
}
这是接收者:
public class ProximityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
String k = LocationManager.KEY_PROXIMITY_ENTERING;
boolean state = arg1.getBooleanExtra(k, false);
if (state) {
Toast.makeText(arg0, "Welcome to my Area", Toast.LENGTH_LONG)
.show();
} else {
Toast.makeText(arg0, "Thank you for visiting my Area!!"+k,
Toast.LENGTH_LONG).show();
}
}
}
在Manifest中,我添加了:
<receiver android:name="ProximityReceiver">
<intent-filter>
<action android:name="com.example.test.proximityalert">
</action>
</intent-filter>
</receiver>
答案 0 :(得分:5)
在我看来,你应该使用多个地理围栏,这是实现你想要的最简单的方法。你可以做一些像目标区域。因此,目标眼睛是您希望用户前往或实现目标的中心。
http://www.cision.com/us/wp-content/uploads/2008/10/j0439610.png
就像在这个目标图像中一样,例如,您将从外到内进行计数,共计6个地理围栏。离目标最近,地理围栏ID 6越高,距离目标最远的区域将是地理围栏ID 1.基本上,您需要协调多个地理围栏才能达到您想要的效果。因此,您将拥有中心地理围栏,而不是将overlapping边界区域分隔为地理围栏。
每当您的用户获得更高的地理围栏值时,意图就会发出信号或音调,例如:&#34;您越来越近&#34;。另一种方式也是如此,对于用户远离目标区域的情况:&#34;您的地理围栏ID从3变为2,您正朝着与目标目标相反的方向移动&# 34。
您当前的代码并未对与地理围栏相关的不同方向进行此类区分,也未显示多个地理围栏的处理方式。这就是为什么代码没有按照您希望的方式运行的原因。