- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 Google Awareness API 实现 Activity Fence。但是没有检测到用户 Activity 的变化。不过,耳机护栏按预期工作。
ActivityFenceActivity
public class ActivityFenceActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks {
private static final String FENCE_RECEIVER_ACTION = "FENCE_RECEIVE";
private static final String FENCE_WALKING_KEY = "walkingKey";
private static final String FENCE_RUNNING_KEY = "runningKey";
private static final String TAG = ActivityFenceActivity.class.getSimpleName();
private GoogleApiClient googleApiClient;
private TextView activityTextView;
private BroadcastReceiver activityFenceReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
Toast.makeText(context, "Recieved", Toast.LENGTH_SHORT).show();
FenceState fenceState = FenceState.extract(intent);
if (TextUtils.equals(fenceState.getFenceKey(), FENCE_WALKING_KEY)) {
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
activityTextView.setText("User is walking");
break;
case FenceState.FALSE:
activityTextView.setText("User is not walking");
break;
case FenceState.UNKNOWN:
activityTextView.setText("Activity state unknown");
break;
}
} else if (TextUtils.equals(fenceState.getFenceKey(), FENCE_RUNNING_KEY)) {
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
activityTextView.setText("User is running");
break;
case FenceState.FALSE:
activityTextView.setText("User is not running");
break;
case FenceState.UNKNOWN:
activityTextView.setText("Activity state unknown");
break;
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_fence);
activityTextView = (TextView) findViewById(R.id.activityTextView);
googleApiClient = new GoogleApiClient.Builder(ActivityFenceActivity.this)
.addApi(Awareness.API)
.addConnectionCallbacks(this)
.build();
googleApiClient.connect();
findViewById(R.id.register_fence).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerActivityFence();
}
});
findViewById(R.id.unregister_fence).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
unregisterActivityFence();
}
});
}
@Override
public void onConnected(@Nullable final Bundle bundle) {
Log.d(TAG, "Google API connected");
}
@Override
public void onConnectionSuspended(final int i) {
Log.d(TAG, "Google API connection suspended");
}
@Override
protected void onStart() {
super.onStart();
registerReceiver(activityFenceReceiver, new IntentFilter(FENCE_RECEIVER_ACTION));
}
@Override
protected void onStop() {
super.onStop();
unregisterReceiver(activityFenceReceiver);
unregisterActivityFence();
}
private void registerActivityFence() {
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
AwarenessFence runningFence = DetectedActivityFence.during(DetectedActivityFence.RUNNING);
PendingIntent fencePendingIntent = PendingIntent.getBroadcast(this,
0,
new Intent(FENCE_RECEIVER_ACTION),
0);
Awareness.FenceApi.updateFences(googleApiClient, new FenceUpdateRequest.Builder()
.addFence(FENCE_WALKING_KEY, walkingFence, fencePendingIntent).build())
.setResultCallback(new ResultCallbacks<Status>() {
@Override
public void onSuccess(@NonNull final Status status) {
Toast.makeText(ActivityFenceActivity.this,
"Fence registered successfully",
Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(@NonNull final Status status) {
Toast.makeText(ActivityFenceActivity.this,
"Cannot register activity fence.",
Toast.LENGTH_SHORT).show();
}
});
Awareness.FenceApi.updateFences(googleApiClient, new FenceUpdateRequest.Builder()
.addFence(FENCE_RUNNING_KEY, runningFence, fencePendingIntent).build());
}
private void unregisterActivityFence() {
Awareness.FenceApi.updateFences(
googleApiClient,
new FenceUpdateRequest.Builder()
.removeFence(FENCE_WALKING_KEY)
.removeFence(FENCE_RUNNING_KEY)
.build()).setResultCallback(new ResultCallbacks<Status>() {
@Override
public void onSuccess(@NonNull Status status) {
Toast.makeText(ActivityFenceActivity.this,
"Fence unregistered successfully.",
Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(@NonNull Status status) {
Toast.makeText(ActivityFenceActivity.this,
"Cannot unregister headphone fence.",
Toast.LENGTH_SHORT).show();
}
});
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.subhrajyoti.awareness">
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.awareness.API_KEY"
android:value="AIzaSyBEmjlfC87xRUP2FnFynsDdY3QRuI1hIHs" />
</application>
</manifest>
最佳答案
如果耳机栅栏有效而 Activity 栅栏不起作用,也许您只是忘记在 list 中添加权限?
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
关于android - Activity Fence 在 Awareness API 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43283337/
我遇到了 iOS iPad 应用程序崩溃,并从“设备”选项卡中获得了以下崩溃日志: Date/Time: 2017-10-13 15:06:22 -0600 OS Version:
Android 是否支持地理围栏,如果是,那么最早支持地理围栏功能的平台是什么。 最佳答案 在您提出问题时没有支持,但 Google 刚刚发布了该功能作为 Google IO 2013 的一部分: h
我有一个 Worker 类,它运行自己的 thread 来并行执行一些工作。在特定的时间间隔内,我希望它空闲。我有一个界面 class Worker { mutex m_wait; v
最近我遇到了一个波兰信息学奥林匹克竞赛的任务,叫做“Fence”,我无法解决它。 第一行输入包含整数n ( 1 a3 a5 a2 a4 a6等等 来自 n 的范围值,似乎解决方案的复杂性类似
所以我做了一些阅读:https://en.wikipedia.org/wiki/Double-checked_locking和 http://preshing.com/20130930/double-
我正在尝试使用 Vulkan 和 C++ 创建游戏。我已经到了使用多个带线程的命令缓冲区的部分 - 或者我想如果我做得正确。 现在,我遇到了栅栏问题。控制台——我添加了一个验证层——说“Fence 0
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我可以包含在 asciidoc 代码围栏内吗?这是一个示例: [source,js] ---- function doit() { *var thing;* // local
我正在测试一个应用程序,查看 Xcode > Window > Devices 中的日志,我发现了以下几行: Apr 1 17:09:33 myIphone locationd[2763] : Fe
在他的 talk 即将结束时关于内存屏障(fences),他举了下面的例子(注意:global is not of atomic type): // thread 1
我用 Python 编写了 Rail Fence Cipher。我想知道是否有更好的解决方案。 对于那些不知道rail fence cipher是什么的人来说,它基本上是一种以螺旋方式创建线性模式的方
为了诊断一个棘手的内存损坏错误(内存被随机覆盖),我考虑使用 Electric Fence + 一些自定义 mprotect 调用来确保损坏的数据结构只有在我希望它们被写入时才可写(并且当试图写入它们
我正在使用 Here Javascript API Explorer 来跟踪主要用于地理围栏的移动 map 对象。我想动态传递路线路径和栅栏路径,因为到目前为止它是硬编码在代码中的。 我尝试使用 ja
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在 lintcode 上遇到了这个问题,我已经阅读了两个过去的解决方案,但它们对我来说都没有意义。 问题如下: There is a fence with n posts, each post ca
我创建了一个有问题的程序 - buggy.c - 这是缓冲区 t 的缓冲区溢出场景。你可以看到我写了 5 个以上的索引。它工作正常。它永远不会给我一个错误。我在想,为什么会这样?我什至尝试了 Valg
我收到了一份关于我们的 iPad 应用程序崩溃的报告,并附有一条日志消息。日志消息的最后几行如下: Aug 21 08:58:51 2TesterPad backboardd[26] : CoreAn
Rocket CPU中的FENCE指令是做什么的?我尝试通过 fpga 源代码但找不到它。 另外,写缓冲区在哪里实现?我可能会在那里得到答案:) 最佳答案 [Rocket's source code]
以下错误消息是什么意思? fence has already activated -- too late to add writes 以下是如何获取它的示例: 环境 : Mac OS X狮子 mete
我有一个数组中的数字列表,我想计算上栅栏。 我知道我必须计算中位数,这可以使用 math.js 库来完成。 var median = math.median(numList); 第三个四分位数是中位数
我是一名优秀的程序员,十分优秀!