- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以Google地理围栏示例代码开头的应用。它运行了好几天,并且我得到了所有预期的过渡意图。但是,过了一段时间(例如3天),该应用程序停止了获取这些意图,我不知道为什么。
创建围栏时,将有效期设置为Geofence。NEVER_EXPIRE
这是我的IntentService,在它们停止工作之前我可以获取过渡意图:
public class ReceiveTransitionsIntentService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
Intent broadcastIntent = new Intent();
broadcastIntent.addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES);
// First check for errors
if (LocationClient.hasError(intent)) {
...handle errors
} else {
// Get the type of transition (entry or exit)
int transition = LocationClient.getGeofenceTransition(intent);
// Test that a valid transition was reported
if ((transition == Geofence.GEOFENCE_TRANSITION_ENTER)
|| (transition == Geofence.GEOFENCE_TRANSITION_EXIT)) {
// Post a notification
NEVER GETS HERE
} else {
...log error
}
}
}
}
<service
android:name="com.aol.android.geofence.ReceiveTransitionsIntentService"
android:exported="false" >
</service>
// Get a PendingIntent that Location Services issues when a geofence transition occurs
mGeofencePendingIntent = createRequestPendingIntent();
// Send a request to add the current geofences
mLocationClient.addGeofences(mCurrentGeofences, mGeofencePendingIntent, this);
private PendingIntent createRequestPendingIntent() {
// Create an Intent pointing to the IntentService
Intent intent = new Intent(context, ReceiveTransitionsIntentService.class);
return PendingIntent.getService(
context,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
}
最佳答案
因此,经过一番尝试之后,示例代码中定义的ReceiveTransitionsIntentService似乎将在应用程序不在时停止获取通知。我认为这是示例代码的一个大问题。似乎这样会使像我这样的人绊倒。
因此,我改为使用广播接收器,到目前为止,从我的测试来看,它似乎仍在工作。
将此添加到 list 中:
<receiver android:name="com.aol.android.geofence.GeofenceReceiver"
android:exported="false">
<intent-filter >
<action android:name="com.aol.android.geofence.ACTION_RECEIVE_GEOFENCE"/>
</intent-filter>
</receiver>
private PendingIntent createRequestPendingIntent() {
// If the PendingIntent already exists
if (null != mGeofencePendingIntent) {
// Return the existing intent
return mGeofencePendingIntent;
// If no PendingIntent exists
} else {
// Create an Intent pointing to the IntentService
Intent intent = new Intent("com.aol.android.geofence.ACTION_RECEIVE_GEOFENCE");
// Intent intent = new Intent(context, ReceiveTransitionsIntentService.class);
/*
* Return a PendingIntent to start the IntentService.
* Always create a PendingIntent sent to Location Services
* with FLAG_UPDATE_CURRENT, so that sending the PendingIntent
* again updates the original. Otherwise, Location Services
* can't match the PendingIntent to requests made with it.
*/
return PendingIntent.getBroadcast(
context,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
}
public class GeofenceReceiver extends BroadcastReceiver {
Context context;
Intent broadcastIntent = new Intent();
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
broadcastIntent.addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES);
if (LocationClient.hasError(intent)) {
handleError(intent);
} else {
handleEnterExit(intent);
}
}
private void handleError(Intent intent){
// Get the error code
int errorCode = LocationClient.getErrorCode(intent);
// Get the error message
String errorMessage = LocationServiceErrorMessages.getErrorString(
context, errorCode);
// Log the error
Log.e(GeofenceUtils.APPTAG,
context.getString(R.string.geofence_transition_error_detail,
errorMessage));
// Set the action and error message for the broadcast intent
broadcastIntent
.setAction(GeofenceUtils.ACTION_GEOFENCE_ERROR)
.putExtra(GeofenceUtils.EXTRA_GEOFENCE_STATUS, errorMessage);
// Broadcast the error *locally* to other components in this app
LocalBroadcastManager.getInstance(context).sendBroadcast(
broadcastIntent);
}
private void handleEnterExit(Intent intent) {
// Get the type of transition (entry or exit)
int transition = LocationClient.getGeofenceTransition(intent);
// Test that a valid transition was reported
if ((transition == Geofence.GEOFENCE_TRANSITION_ENTER)
|| (transition == Geofence.GEOFENCE_TRANSITION_EXIT)) {
// Post a notification
List<Geofence> geofences = LocationClient
.getTriggeringGeofences(intent);
String[] geofenceIds = new String[geofences.size()];
String ids = TextUtils.join(GeofenceUtils.GEOFENCE_ID_DELIMITER,
geofenceIds);
String transitionType = GeofenceUtils
.getTransitionString(transition);
for (int index = 0; index < geofences.size(); index++) {
Geofence geofence = geofences.get(index);
...do something with the geofence entry or exit. I'm saving them to a local sqlite db
}
// Create an Intent to broadcast to the app
broadcastIntent
.setAction(GeofenceUtils.ACTION_GEOFENCE_TRANSITION)
.addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES)
.putExtra(GeofenceUtils.EXTRA_GEOFENCE_ID, geofenceIds)
.putExtra(GeofenceUtils.EXTRA_GEOFENCE_TRANSITION_TYPE,
transitionType);
LocalBroadcastManager.getInstance(MyApplication.getContext())
.sendBroadcast(broadcastIntent);
// Log the transition type and a message
Log.d(GeofenceUtils.APPTAG, transitionType + ": " + ids);
Log.d(GeofenceUtils.APPTAG,
context.getString(R.string.geofence_transition_notification_text));
// In debug mode, log the result
Log.d(GeofenceUtils.APPTAG, "transition");
// An invalid transition was reported
} else {
// Always log as an error
Log.e(GeofenceUtils.APPTAG,
context.getString(R.string.geofence_transition_invalid_type,
transition));
}
}
/**
* Posts a notification in the notification bar when a transition is
* detected. If the user clicks the notification, control goes to the main
* Activity.
*
* @param transitionType
* The type of transition that occurred.
*
*/
private void sendNotification(String transitionType, String locationName) {
// Create an explicit content Intent that starts the main Activity
Intent notificationIntent = new Intent(context, MainActivity.class);
// Construct a task stack
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the main Activity to the task stack as the parent
stackBuilder.addParentStack(MainActivity.class);
// Push the content Intent onto the stack
stackBuilder.addNextIntent(notificationIntent);
// Get a PendingIntent containing the entire back stack
PendingIntent notificationPendingIntent = stackBuilder
.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
context);
// Set the notification contents
builder.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(transitionType + ": " + locationName)
.setContentText(
context.getString(R.string.geofence_transition_notification_text))
.setContentIntent(notificationPendingIntent);
// Get an instance of the Notification manager
NotificationManager mNotificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
// Issue the notification
mNotificationManager.notify(0, builder.build());
}
}
关于android-geofence - Android Geofence最终停止获得过渡意图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19505614/
作为后续问题:Laravel Redirect::intended() conditional fallbacks 我遇到了一个问题,在设置了预期的 URL session 后,即使用户决定不登录而是
我面临一个问题,即与任何意图不匹配的单词,它会假设它属于标记最多的话语的意图。 示例:如果 意图 A 由动物等话语组成 意图 B 包含“水果”等话语 意图 C 由诸如昆虫之类的话语组成 意图 D 由诸
拥有什么实际区别 subroutine fillName(person) type(PersonType), intent(inout) :: person person%name = "
我想知道 Dialogflow 中是否有任何商定的意图、事件和上下文的命名约定。 如果没有,那么如果您分享您自己的命名约定,我将不胜感激! 最佳答案 我发现“只要别人容易理解就行”这句话有点矛盾。如果
我正在尝试了解使用队列的用例。 我的理解:队列意味着一对一。唯一的用例(如果不是罕见的话,很少)是:消息仅供一次使用。 但即使在这些情况下,我也可能想使用主题(只是为了将来安全)。唯一需要额外注意的是
我的 Xcode 是 v10,我正在为 SiriKit 开发一个针对 iOS 12 的自定义 intent。 在 Xcode 10 中,自定义意图是在 .intentdefinition 文件中设计的
我有一个设置了 .intentdefinition 文件的 WidgetKit ,我可以在运行我的 WidgetKit 时从我的枚举中进行选择,但我不确定如何在代码中使用这些信息。 我希望能够根据用户
我需要为意图过滤器注册(在运行时)自定义 BroadcastReceiver 可以在 list 中描述为 并在用户通过按应用程序中的某个按钮退出应用程序时取消注册接收
根据 Fortran 标准: The INTENT (OUT) attribute for a nonpointer dummy argument specifies that the dummy a
我正在使用 Twitter Web Intents 来检查是否有人关注我。现在的问题是;我只在事件对象中获取我自己的屏幕名作为回调。 twttr.events.bind('follow', funct
编辑 很抱歉大家,这只是由于意图名称后面缺少逗号。非常抱歉x: 我最近使用 Microsoft Bot Framework (botbuilder v3.14.0)、Node.js (v8.9.4)
我正在开发的产品: RequeSTLy - Chrome 和 Firefox 扩展设置重定向、修改 header 、切换主机、插入用户脚本 ( https://www.requestly.in/ )
有什么方法可以有目的地合并对话框,这样我就不需要多余的代码片段? bot.dialog('whats-your-name', require('./dialogs/whats-your-name')
我是 Dialogflow 的新手,虽然它很容易理解,但我无法使用自定义事件触发 Intent。 我必须实现的任务是,当在后端 Node.js Webhook 中检测到警报时(例如:老板想要做某事),
在 Microsoft Bot Framework 中,我已经开始对话并运行一些意图,假设“登录”,但是当我向用户询问用户名或密码时,他可能会说“取消该”或“取消登录”,我如何获得此意图:“取消”以及
我使用 LUIS 框架构建了一个运行良好的机器人。在研究过程中遇到了以下几点 与 LUIS 意图连接后;机器人无法检查正则表达式意图喜欢 对于我正在尝试设置的对话框.matches('^helpdes
我想知道 URL 是发布到 facebook 的链接。在 Twitter 上,我可以使用“http://twitter.com/intent/tweet?text=”来发推文。虽然我试图寻找一个,但我
通读,http://www.w3schools.com/angular/angular_directives.asp我遇到了一个在评论中调用指令的例子,具体来说: 您可以在 http://www.w
我在 Stack Overflow 上的许多帖子中读到,可分配数组在传递到虚拟参数为 intent(out) 的子例程中时会被释放。 如果我考虑以下代码: program main real, di
API.ai 的预构建包可让您轻松获得长长的意图列表。目前,我正在尝试利用他们的 smalltalk 包,该包有大约 100 个意图,并对每个意图做出响应。 我正在使用api-ai-recognize
我是一名优秀的程序员,十分优秀!