java - Google Play 服务 Activity 识别断开连接没有任何错误

标签 java android eclipse google-play-services

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

对于 Activity ,我使用的是 google api 客户端。该应用程序在 Moto G 手机上正常运行,即记录 Activity 和屏幕,但 Activity 识别在 HTC one 手机上停止。

我对代码做了一些更新,但仍然存在 Activity 识别在几分钟后停止的问题。根据另一位成员的建议,我还导出了 android-support-v4.jarandroid-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/

相关文章:

java - Groovy 约定 : Where do I put metaClass definitions?

java - JSpinner 将 Calendar.MINUTE 递增 15

android - Android 上的 ORMLite 不调用 onCreate

java - 无法加载库 'kernel32'

java - 正确使用repaint()方法

java - session 中登录网站的不同用户的 HashMap

java - 如何在 Maven 构建中包含带有资源的文件夹

android - 用于加载 HTML5 站点的应用程序容器

java - Android:重叠使列表错误

eclipse - 如何在 Eclipse 中卸载 jar 文件?