Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 位置经理ProxmityAlert总是说进入_Android_Locationmanager_Geofencing - Fatal编程技术网

Android 位置经理ProxmityAlert总是说进入

Android 位置经理ProxmityAlert总是说进入,android,locationmanager,geofencing,Android,Locationmanager,Geofencing,我想在用户靠近特定位置时提醒他。为此,我在我的应用程序中包括了一个ProxmityAlert和一个相应的服务。但无论我给出什么坐标,它总是显示“谢谢你访问我的区域!!进入”我这样做是不是错了 我就是这样做的: public class ProxTest extends Activity { LocationManager lm; double lat = 30.085514, long1 = 77.082603; float radius = 50; @Override public void

我想在用户靠近特定位置时提醒他。为此,我在我的应用程序中包括了一个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();

    }
}
}
<receiver android:name="ProximityReceiver">
      <intent-filter>
      <action android:name="com.example.test.proximityalert">
      </action>
      </intent-filter>
  </receiver>
}

这是接收者:

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();

    }
}
}
<receiver android:name="ProximityReceiver">
      <intent-filter>
      <action android:name="com.example.test.proximityalert">
      </action>
      </intent-filter>
  </receiver>
在清单中,我添加了:

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();

    }
}
}
<receiver android:name="ProximityReceiver">
      <intent-filter>
      <action android:name="com.example.test.proximityalert">
      </action>
      </intent-filter>
  </receiver>

在我看来,你应该使用多重地理围栏,这是实现你想要的最简单的方法。你可以做一些类似于目标区域的事情。因此,目标眼睛是您希望用户离开或实现目标的中心


(来源:)

例如,像在这个目标图像中,你将从外到内计数,总共有6个地理围栏。距离目标最近,地理围栏ID 6越高,距离目标最远的区域将是地理围栏ID 1。基本上,您需要协调多个地理围栏以实现您的愿望。因此,与边界区域分开的地理围栏不同,您将使用中心地理围栏

每次你的用户得到一个地理围栏更高的值时,一个意图就会发出一个信号或音调,例如:“你越来越近了”。另一种情况也是如此,对于用户正在远离目标区域的情况:“您的地理围栏ID从3变为2,您正在从目标目的地向相反方向移动”

您当前的代码没有对与地理围栏相关的不同方向进行这种区分,也没有显示对多个地理围栏的处理。这就是代码没有按您希望的方式运行的原因