我已经使用该代码在30秒间隔和30米距离之后播放mp3声音,但是在移动设备正在睡眠之后它没有播放,而且我已经走了5英里以上。
如何使上面的代码工作? 请帮忙。
先谢谢。
我有一个插件查询:onLocationChanged方法是否知道我的上一个位置?换句话说,如果我执行了这个陈述:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30, 30000, new MyLocationListener());
mp3文件会每30秒执行一次间隔和30分钟距离吗?或者我必须在ScheduledExecutorService中执行这样的声明:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleWithFixedDelay(new Runnable(){
public void run() {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30, 30000, new MyLocationListener());
}
}, 0, 600, TimeUnit.SECONDS);
总代码:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30, 30000, new MyLocationListener());
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
///Audio file which plays everytime the above condition is met
mp3.start();
);
Toast.makeText(AndroidGPSSampleActivity.this, message, Toast.LENGTH_LONG).show();
}
public void onStatusChanged(String s, int i, Bundle b) {
Toast.makeText(AndroidGPSSampleActivity.this, "Provider status changed",Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String s) {
Toast.makeText(AndroidGPSSampleActivity.this,"Provider disabled by the user. GPS turned off",Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {
System.out.println("==onProviderEnabled=" + s);
Toast.makeText(AndroidGPSSampleActivity.this, "Provider enabled by the user. GPS turned on",Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:2)
首先,我认为您需要检查您的位置参数是否符合您的意思。你30的时间实际意味着30毫秒,我想你想要30 * 1000.你的距离是30000米,大约是18英里。所以我认为你不想要30000,而是30。
现在,只有当位置实际发生变化时,才会根据这些参数通知您。因此,如果在30秒内位置相同或距离最后一个位置不到30米,您将不会收到通知。此外,您正在使用网络提供商,在最佳情况下,如果您有wifi位置,您的准确度为60米,这意味着在收到通知之前您可能需要移动更多。如果您正在获得蜂窝塔位置,那么在切换蜂窝塔之前,您可能会走很长的路,因此也就是位置。