Java Google Play services活动识别断开连接,无任何错误

Java Google Play services活动识别断开连接,无任何错误,java,android,eclipse,google-play-services,Java,Android,Eclipse,Google Play Services,我正在编写一个后台服务(由一个活动启动),它记录屏幕开/关事件和用户的活动 对于活动,我使用谷歌api客户端。该应用程序在Moto G手机上正常工作,即记录活动和屏幕,但在HTC one手机上停止活动识别 我对代码做了一些更新,但仍然存在一个问题,即活动识别会在几分钟后停止。根据另一位成员的建议,我还导出了android-support-v4.jar和android-support-v7-appcompat.jar文件,但问题仍然存在 手机的位置已打开,但未处于省电模式。此外,我将手机上的SDK

我正在编写一个后台服务(由一个活动启动),它记录屏幕开/关事件和用户的活动

对于活动,我使用谷歌api客户端。该应用程序在Moto G手机上正常工作,即记录活动和屏幕,但在HTC one手机上停止活动识别

我对代码做了一些更新,但仍然存在一个问题,即活动识别会在几分钟后停止。根据另一位成员的建议,我还导出了android-support-v4.jarandroid-support-v7-appcompat.jar文件,但问题仍然存在

手机的位置已打开,但未处于省电模式。此外,我将手机上的SDK和google play服务更新为最新版本,但几分钟后我的api客户端仍然断开连接。下面是我使用的代码文件

请帮我纠正这个问题。我正在使用eclipse

MyActivity:

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

    }
}
活动识别服务

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 "";
    }
正如我刚才回答的那样,似乎没有办法了。手机“静止”一段时间后,活动报告将停止

如果您想在手机“静止”的情况下录制,我有两种方法:

1) 完全依赖ActivityRecognition API并记录“静止”,直到谷歌服务检测到重大运动,ActivityRecognition开始向您发送新更新


2) 编写您自己的简单StillActivityRecognitionService,该服务在“官方”API没有更新时启动。该服务应收听加速计传感器,解释传感器事件(偏离平均值、峰值等),并发送其决定“仍然”/“不仍然”。

请将您的代码与谷歌编写的repo进行比较。谢谢!我正在比较。结果如何?代码是正确的,问题在于手机。比如,如果手机闲置一段时间,就不会有任何活动记录(这是有道理的)。但是在我的其他测试手机上,即使它们处于空闲状态,在固定的时间间隔后(比如10分钟后)仍能感觉到活动。哪些测试手机?在L或M上?是的,这也是我在研究中发现的:)但我刚刚发现另一款手机LG也有同样的问题,我的意思是用户正在使用手机,但一段时间后活动感知仍然停止,你有什么建议吗?如果感知停止,它是可以的,因为它是这个ActivityRecognition API的一个功能。问题是,如果它再也不会开始感知了。我猜在你走了一段时间后,ActivityRecognition醒来并重新开始感知。因此,正如我在回答中所写的,有两种方式:信任此服务或编写您自己的辅助工具,它可能会使用AlarmManager以所需的延迟唤醒手机,感知加速计1-5秒,计算与平均值的偏差,并发送其决定“仍然”或“未知”但它在我的其他测试手机上工作得非常完美。对我来说,当用户长时间处于静止状态时,感知就会停止,但一旦用户再次处于活动状态,则应该有一个活动日志。这是我在HTC上观察到的。有什么建议吗?顺便说一句,我的应用程序是一个空白的活动,它启动了许多服务,如位置感应等。除了活动之外,其他一切都正常工作。也许可以添加一些日志,这样当它输入“onConnectionFailed”时,您就可以了。我还要在其中添加“mgoogleapclient.disconnect()”