gpt4 book ai didi

Android 地理围栏在某些手机(如 OnePlus、小米等)中不会触发

转载 作者:搜寻专家 更新时间:2023-11-01 09:22:28 31 4
gpt4 key购买 nike

我正在根据 Android 文档的指南使用地理围栏代码。在索尼 XA1、三星 J7 Nxt、小米 5A、Poco f1、OnePlus 6 等真实设备上进行测试。地理围栏 EnterExit 在索尼 XA1、三星中正常工作J7 下一步。

小米OnePlus Mobile 中的问题。

  1. 在小米5A中,有些时候Enter正常,但是Exit不触发。
  2. 在小米 Poco f1 中,EnterExit 都不起作用。
  3. 在 OnePlus Mobile 中仅在应用打开时工作。

地理围栏代码:

private GeofencingClient mGeofencingClient;
private ArrayList<Geofence> mGeofenceList;
private PendingIntent mGeofencePendingIntent;

mGeofenceList = new ArrayList<>();
mGeofencingClient = LocationServices.getGeofencingClient(getApplicationContext());

//Latitude & Longitude Comes from Array to Add
mGeofenceList.add(new Geofence.Builder().setRequestId(String.valueOf(mall.mallId)).setCircularRegion(
mall.latitude,
mall.longitude,
mall.geofencingMeters)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT)
.build());

private GeofencingRequest getGeofencingRequest() {

GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
builder.addGeofences(mGeofenceList);

return builder.build();
}

private PendingIntent getGeofencePendingIntent() {
if (mGeofencePendingIntent != null) {
return mGeofencePendingIntent;
}
Intent intent = new Intent(this, GeofenceBroadcastReceiver.class);
mGeofencePendingIntent = PendingIntent.getBroadcast(this, FENCING_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
return mGeofencePendingIntent;
}

广播接收器

public class GeofenceBroadcastReceiver extends BroadcastReceiver {

/**
* Receives incoming intents.
*
* @param context the application context.
* @param intent sent by Location Services. This Intent is provided to Location
* Services (inside a PendingIntent) when addGeofences() is called.
*/
@Override
public void onReceive(Context context, Intent intent) {
// Enqueues a JobIntentService passing the context and intent as parameters
StoreFencing.enqueueWork(context, intent);
}
}
}

防护服务:

public class StoreFencing extends JobIntentService {

private static final int JOB_ID = 502;
List<Geofence> triggeringGeofences;

public static void enqueueWork(Context context, Intent intent) {
enqueueWork(context, StoreFencing.class, JOB_ID, intent);
}

@Override
protected void onHandleWork(@NonNull Intent intent) {

GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
if (geofencingEvent.hasError()) {

return;
}

int geofenceTransition = geofencingEvent.getGeofenceTransition();

if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER) {

triggeringGeofences = geofencingEvent.getTriggeringGeofences();
getGeofenceEnterTransitionDetails(triggeringGeofences);

}

if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {

triggeringGeofences = geofencingEvent.getTriggeringGeofences();
getGeofenceExitTransitionDetails(triggeringGeofences);

}

}
}

代码或设备是否有问题。通知用户在这些手机中启用其他设置。帮助解决这个问题。

最佳答案

是的,我也遇到过这些问题。

  1. 在 One Plus 设备上,必须禁用应用的电池优化,即必须在“设置”>“电池”>“所有应用”>“YourApp”中将其设置为“不优化”。只有这样,它才能在您的应用处于后台或什至不处于后台时运行。

  2. 在小米设备上,您的应用必须在设置中启用自动启动权限,地理围栏才能正常工作。

  3. 大多数其他中国设备,如联想、酷派等,在最近的应用程序被杀死后也没有触发任何地理围栏转换事件。

您可以将用户重定向到设置中的特定页面,并告诉他们启用/禁用它们以使地理围栏正常工作。

除此之外,我还没有找到任何解决方案。

您也可以查看这些 Geofence Troubleshing

关于Android 地理围栏在某些手机(如 OnePlus、小米等)中不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53631565/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com