当前位置: 首页 > 知识库问答 >
问题:

ActivityRecognition API在一段时间后不发送运动

笪煌
2023-03-14

我有一个使用Activity认可的Detected活动广播接收器。我注意到它确实连接了,但我没有得到任何数据。这是在三星Note 2上。在其他手机上,我尝试过它总是有效的。这是连接到谷歌api的代码:

  public synchronized void buildGoogleApiClient() {
    if(PSLocationCenter.getInstance().pref.getAutoPilot(context) || (PSTripDBFactory.getInstance(context).getActiveTrip()!= null)){
        Log.i("","autopilot, will activate");
        if(mGoogleApiClient == null || !mGoogleApiClient.isConnected()) {
            mGoogleApiClient = new GoogleApiClient.Builder(context)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(ActivityRecognition.API)
                    .build();
            Log.i("", "autopilot build google api client");
            mGoogleApiClient.connect();
            Log.i("", "autopilot register receiver");
            LocalBroadcastManager.getInstance(context).registerReceiver(mBroadcastReceiver,
                    new IntentFilter(Constants.BROADCAST_ACTION));
        }else{
            Log.i("", "autopilot is already connected");
            if(!PSLocationCenter.getInstance().pref.getMotionDetection(context)){
                requestActivityUpdatesButtonHandler();
            }
            if(PSTripDBFactory.getInstance(context).getActiveTrip()== null) {
                PSLocationCenter.getInstance().requestLocationUpdatesFromMotion();
            }
        }
    }else{
        if(mGoogleApiClient != null && mGoogleApiClient.isConnected()){
            removeActivityUpdatesButtonHandler();
        }
        Log.i("","autopilot, will NOOOT activate");
    }
}

这是请求动作的代码:

  public void requestActivityUpdatesButtonHandler() {
        Log.i("", "autopilot request activity update");
        Utils.appendLog("AUTOPILOT requestActivityUpdatesButtonHandler", false);
        if(mGoogleApiClient != null && mGoogleApiClient.isConnected()){
            Log.i("","AUTOPILOT requestActivityUpdatesButtonHandler GOOGLE API CLIENT CONNECTED");
            Utils.appendLog("AUTOPILOT requestActivityUpdatesButtonHandler GOOGLE API CLIENT CONNECTED", false);
            PSLocationCenter.getInstance().pref.setMotionDetection(context, true);
            ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(
                    mGoogleApiClient,
                    Constants.DETECTION_INTERVAL_IN_MILLISECONDS,
                    getActivityDetectionPendingIntent()
            ).setResultCallback(this);
        }else if(mGoogleApiClient != null && mGoogleApiClient.isConnecting()){
            Log.i("","AUTOPILOT requestActivityUpdatesButtonHandler GOOGLE API CLIENT CONNECTING");
            Utils.appendLog("AUTOPILOT requestActivityUpdatesButtonHandler GOOGLE API CLIENT CONNECTING", false);
            Handler han = new Handler();
            han.postDelayed(new Runnable() {
                @Override
                public void run() {
                    requestActivityUpdatesButtonHandler();
                }
            },500);
        }else{
            Log.i("","AUTOPILOT requestActivityUpdatesButtonHandler GOOGLE API CLIENT NOT CONNECTED");
            Utils.appendLog("AUTOPILOT requestActivityUpdatesButtonHandler GOOGLE API CLIENT NOT CONNECTED", false);
            buildGoogleApiClient();
        }
    }

其中“GetActivityDetectionPendingContent”是:

  private PendingIntent getActivityDetectionPendingIntent() {
        Log.i("", "autopilot get activity detection pending intent");
        // Reuse the PendingIntent if we already have it.
        if (mActivityDetectionPendingIntent != null) {
            return mActivityDetectionPendingIntent;
        }
        Intent intent = new Intent(context, DetectedActivitiesIntentService.class);

        // We use FLAG_UPDATE_CURRENT so that we get the same pending intent backListener when calling
        // requestActivityUpdates() and removeActivityUpdates().
        return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    }

奇怪的是,我然后重新启动了手机。进入应用程序,重新启动后,我只是稍微摇晃了一下手机,开始获取位置。广播接收器是否有可能以某种方式被强制关闭?或者识别活动被破坏?其他人有这个问题吗?有没有办法检查我的广播接收器的状态?我没有日志,因为我在日志中没有问题。它只是构建api客户端,然后用这个请求动议:

  ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(
                    mGoogleApiClient,
                    Constants.DETECTION_INTERVAL_IN_MILLISECONDS,
                    getActivityDetectionPendingIntent()
            ).setResultCallback(this);

共有1个答案

闻人杰
2023-03-14

我自己也在调查这个。从留档:

为了节省电池,当设备长时间处于“静止”状态时,活动报告可能会停止。一旦设备再次移动,它将恢复。这仅在支持传感器的设备上发生。键入\u SIGNIFICANT\u运动硬件。

从API 21开始,如果设备处于省电模式并且屏幕关闭,则接收活动的频率可能低于检测IntervalMillis参数。

因此,为了节省电池,ActivityRecognition将在可能的情况下进入睡眠状态(并停止触发事件)。

 类似资料:
  • 我正在尝试创建一个运行游戏循环线程的surfaceView,我花了很多时间来解决这个问题,运行了一段时间后,游戏循环似乎很好,它继续运行,并在第一次运行后继续抛出错误,它运行了一段时间,并像它假设的那样绘制,但随后返回null,我已将System.out。println();在多个位置查看某些方法是否正在运行,以及它们运行了多少次(是的,我知道使用日志,但我不太喜欢它们),无论如何,我注意到的是,

  • 我有带oauth2安全mySql数据库连接和一些控制器的Spring Boot应用程序。我已经在AWS服务器上部署了它,它工作得很好,但它在一段时间后关闭了,它没有得到很多API调用,所以没有理由DDOS失败或outOfMemmory错误,我可以在日志中看到以下消息 2018-10-28 10:58:55.979信息1253---[线程-3]ConfigServletWebServerApplic

  • 我正在尝试设置一个通知,使其在某个时间间隔后出现。我本以为这能起作用,但在我的手机上运行代码时,除了在控制台上打印接收器外,似乎什么都没有发生,我似乎不知道为什么。任何帮助都将不胜感激。 这是用于设置警报的代码。 这是notification receiver类 以下是相关清单行,接收者Android:name=“.notificationreceiver”使用权限Android:name=”co

  • 我们有一个具有Ha all策略的2节点RabbitMQ集群。我们在应用程序中使用Spring AMQP与RabbitMQ对话。生产者部分工作正常,但消费者工作了一段时间并暂停。生产者和消费者作为不同的应用程序运行。更多关于消费者部分的信息。 我们将与一起使用,使用手动模式和默认 在我们的应用程序中,我们创建队列(按需)并将其添加到侦听器中 当我们从10个和20个开始时,消费大约持续15个小时并暂停

  • 问题内容: 这可能是一个重复的问题,但我没有找到想要的东西。我在UI活动中调用AsyncTask, 在doInBackground中调用需要时间的方法。如果一段时间后没有返回数据,我想中断该线程。以下是我尝试执行此操作的代码。 但这并不能在30秒后停止任务,事实上,这花费了更多时间。我也尝试过,但这也不起作用。 谁能告诉我该怎么做或如何在doInBackground中使用isCancelled()

  • 我需要每隔一段时间发送某种保持活动状态的数据包吗? 编辑:要注意,这是与同一台计算机上的对等项。该计算机位于NAT的后面,NAT将用于此计算机的一系列端口转发到该端口。与服务器连接的客户端通过DNS打开连接。即使用myDomain.net端口进行连接。