我正在编写一个记录屏幕开/关事件和用户 Activity 的后台服务(由 Activity 启动)。
对于 Activity ,我使用的是 google api 客户端。该应用程序在 Moto G 手机上正常运行,即记录 Activity 和屏幕,但 Activity 识别在 HTC one 手机上停止。
我对代码做了一些更新,但仍然存在 Activity 识别在几分钟后停止的问题。根据另一位成员的建议,我还导出了 android-support-v4.jar 和 android-support-v7-appcompat.jar 文件,但问题仍然存在。
手机的定位功能已开启,但未处于省电模式。此外,我将我的 SDK 以及手机上的 google play 服务更新为最新版本,但几分钟后我的 api 客户端仍然断开连接。以下是我使用的代码文件。
请帮我改正这个问题。我正在使用 eclipse 。
我的 Activity :
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 "";
}
最佳答案
正如我刚刚回答的here ,似乎没有办法绕过。手机“静止”一段时间后, Activity 报告将停止。
如果你想在手机“静止”的情况下也能录音,我看到两种方式:
1) 完全依赖 ActivityRecognition API 并记录“静止”,直到 Google 服务检测到 SIGNIFICANT_MOTION 并且 ActivityRecognition 开始向您发送新的更新;
2) 编写您自己的简单 StillActivityRecognitionService,它会在“官方”API 没有更新时启动。此服务应监听加速度计传感器,解释传感器事件(偏离平均值、峰值等)并发送“静止”/“非静止”的决定。
关于java - Google Play 服务 Activity 识别断开连接没有任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879183/