Google Play 服务活动识别断开连接且没有任何错误
Posted
技术标签:
【中文标题】Google Play 服务活动识别断开连接且没有任何错误【英文标题】:Google Play services activity recognition disconnects without any error 【发布时间】:2015-12-29 00:17:21 【问题描述】:我正在编写一个后台服务(由一个活动启动),它记录屏幕开/关事件和用户的活动。
对于活动,我正在使用 google api 客户端。该应用程序在 Moto G 手机上正常运行,即记录活动和屏幕,但在 HTC 一部手机上停止活动识别。
我对代码做了一些更新,但仍然存在活动识别在几分钟后停止的问题。正如另一位成员所建议的,我还导出了 android-support-v4.jar 和 android-support-v7-appcompat.jar 文件,但问题仍然存在。
手机的位置信息已开启,但未开启省电模式。此外,我将我的 SDK 以及手机上的 google play 服务更新到最新版本,但几分钟后我的 api 客户端仍然断开连接。以下是我使用的代码文件。
请帮我纠正这个问题。我正在使用日食。
我的活动:
public class MyActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
private PendingIntent pIntent;
GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(ActivityRecognition.API).addConnectionCallbacks(this).addOnConnectionFailedListener(this).build();
mGoogleApiClient.connect();
IntentFilter filter = new IntentFilter();
filter.addAction("ACTIVITY_RECOGNITION");//For filtering
@Override
public void onConnected(Bundle arg0)
Intent intent = new Intent(this, ActivityRecognitionService.class);
pIntent = PendingIntent.getService(this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleApiClient, 0, pIntent);//0
//@Override
public void onConnectionSuspended(int arg0)
// TODO Auto-generated method stub
mGoogleApiClient.connect(); //I found this recently, but still app doesn't works
@Override
public void onConnectionFailed(ConnectionResult result)
// TODO Auto-generated method stub
ActivityRecognitionService
public class ActivityRecognitionService extends IntentService
private String TAG = "appLogs...";
private long fName;
public ActivityRecognitionService()
super("My Activity Recognition Service");
@Override
protected void onHandleIntent(Intent intent)
if(ActivityRecognitionResult.hasResult(intent))
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
Log.i(TAG, getType(result.getMostProbableActivity().getType()) + "t" + result.getMostProbableActivity().getConfidence());
private String getType(int type)
if(type == DetectedActivity.UNKNOWN)
return "Unknown";
else if(type == DetectedActivity.IN_VEHICLE)
return "In Vehicle";
else if(type == DetectedActivity.ON_BICYCLE)
return "On Bicycle";
else if(type == DetectedActivity.ON_FOOT)
return "On Foot";
else if(type == DetectedActivity.STILL)
return "Still";
else if(type == DetectedActivity.TILTING)
return "Tilting";
else if(type == DetectedActivity.RUNNING)
return "Running";
else if(type == DetectedActivity.WALKING)
return "Walking";
else
return "";
【问题讨论】:
请将您的代码与 googler 编写的this repo 进行比较。 谢谢!我在比较。 结果如何? 代码正确,问题出在手机上。就像手机闲置一段时间一样,就没有活动记录(这是有道理的)。但在我的其他测试手机上,即使它们处于空闲状态,在固定时间间隔后(如 10 分钟后)仍能感知到活动 哪些测试手机?在 L 还是 M? 【参考方案1】:正如我刚刚回答了here,看来没有办法了。手机“静止”一段时间后,活动报告将停止。
如果你想即使手机“静止”也要录音,我看到两种方法:
1) 完全依赖 ActivityRecognition API 并记录“静止”,直到 Google 服务检测到 SIGNIFICANT_MOTION 并且 ActivityRecognition 开始向您发送新的更新;
2) 编写自己的简单 StillActivityRecognitionService,当“官方”API 没有更新时启动。该服务应该监听加速度计传感器,解释传感器事件(偏离平均值、峰值等)并发送它的决定“静止”/“静止”。
【讨论】:
是的,这也是我从研究中发现的 :) 但是我刚刚发现另一部手机 LG 有同样的问题,我的意思是用户正在使用手机但一段时间后活动感应仍然停止,您有什么建议吗? 如果感应停止也没关系,因为这是 ActivityRecognition API 的一个特性。问题是它是否永远不会再次开始感应。我猜你走一会儿后 ActivityRecognition 会醒来并再次开始感应。所以正如我在我的答案中所写 - 两种方式:信任此服务或编写您自己的辅助,这可能会使用 AlarmManager 以所需的延迟唤醒手机,感应加速度计 1-5 秒,计算与平均值的偏差和将它的决定“仍然”或“未知”发送到广播接收器等等 但它在我的其他测试手机上完美运行。对我来说,当用户长时间静止时感应停止是有意义的,但一旦用户再次处于活动状态,那么应该有一个活动日志。这是我在 HTC 上观察到的。有什么建议?顺便说一句,我的应用程序是空白活动,它启动了许多服务,如位置感应等。除了活动之外,其他一切都运行良好 可能会添加一些日志,这样您就可以在它输入“onConnectionFailed”时进行操作。我也会在其中添加“mGoogleApiClient.disconnect()”以上是关于Google Play 服务活动识别断开连接且没有任何错误的主要内容,如果未能解决你的问题,请参考以下文章
使用“Google Play 游戏服务”玩游戏时突然断开连接
为啥我登录谷歌play商店说啥与谷歌连接断开,稍后再试?求解答