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

谷歌活动识别API

伯英武
2023-03-14

我将使用google play services活动识别api编写一个应用程序。android开发者网站上的培训是直接进行的,但在过去的几个小时里,我编写了一个简单的html" target="_blank">应用程序,但没有得到任何结果。更新:实际上,我将在5秒钟的时间间隔内以toast消息的形式显示用户的当前活动(如ActivityRecognitionService-Intent服务中的OnIntentHandler方法所示)。我认为调用Intent有问题,因为正如您在我的代码中看到的,toast表示ActivityRecognitionClient是通过OnConnected方法连接的。

我错过什么了吗?

提前谢谢。

清单文件:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nikapps.activityrecognition"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission
    android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <service
        android:name="com.nikapps.activityrecognition.ActivityRecognitionService"
        android:label="@string/app_name"
        android:exported="false">
        </service>
        <activity
            android:name="com.nikapps.activityrecognition.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

主要活动。Java语言

    package com.nikapps.activityrecognition;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.location.ActivityRecognitionClient;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements ConnectionCallbacks, OnConnectionFailedListener{

    public static int intervals = 5000;
    private PendingIntent pendingIntent;
    private ActivityRecognitionClient activityRecognition;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        activityRecognition = new ActivityRecognitionClient(this, this, this);
        activityRecognition.connect();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onConnected(Bundle connectionHint) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "connected", Toast.LENGTH_SHORT).show();

        Intent intent = new Intent(this, ActivityRecognitionService.class);

        pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        activityRecognition.requestActivityUpdates(0, pendingIntent);
    }

    @Override
    public void onDisconnected() {
        // TODO Auto-generated method stub
        Toast.makeText(this, "disconnected", Toast.LENGTH_SHORT).show();

    }

}

ActivityRecognitionService。Java语言

    package com.nikapps.activityrecognition;

import com.google.android.gms.location.ActivityRecognitionResult;
import com.google.android.gms.location.DetectedActivity;

import android.app.IntentService;
import android.content.Intent;
import android.widget.Toast;

public class ActivityRecognitionService extends IntentService{

    public ActivityRecognitionService() {
        super("ActivityRecognitionService");
        Toast.makeText(this, "here", Toast.LENGTH_SHORT).show();
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        // TODO Auto-generated method stub

        Toast.makeText(this, "here2", Toast.LENGTH_SHORT).show();
        ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
        DetectedActivity activity = result.getMostProbableActivity();
        int type = activity.getType();

        Toast.makeText(this, getNameFromType(type), Toast.LENGTH_SHORT).show();

    }

    private String getNameFromType(int activityType) {
        switch(activityType) {
            case DetectedActivity.IN_VEHICLE:
                return "in_vehicle";
            case DetectedActivity.ON_BICYCLE:
                return "on_bicycle";
            case DetectedActivity.ON_FOOT:
                return "on_foot";
            case DetectedActivity.STILL:
                return "still";
            case DetectedActivity.UNKNOWN:
                return "unknown";
            case DetectedActivity.TILTING:
                return "tilting";
        }
        return "unknown";
    }
}

共有2个答案

向杜吟
2023-03-14

只能从设置了处理程序/循环器的线程调用Toast。要实现你的设想,你有两个选择

  1. 使用IntentService的广播,并拥有一个具有显示UI的BroadcastRecencer的活动。这样,当活动不在前台时,就不会显示祝酒词。在您的onResume()/onPrett()中注册/注销接收器
  2. 创建一个处理程序并在Handler.post中调用您的方法(new Runnable(){...})

从服务Android调用吐司时出错

洪子晋
2023-03-14

您可以广播从服务向主类发送消息的意图,例如,在ActivityRecognitionService中使用以下内容。java:

Intent mIntent = new Intent("myCustomIntentMessage")
    .putExtra("ActivityType", getNameFromType(type));
getLocalBroadcast().sendBroadcast(mIntent);

然后,您只需在MainActivity上注册“myCustomIntentMessage”的广播接收器。java并将Toast消息代码放入广播接收器OnReceive事件中。

 类似资料:
  • 在最近的Google Play服务更新中,有人对活动识别API有问题吗? 我已经在一个应用程序中实现了它。在5.0更新之前,它工作得非常好。现在,当用户走路或坐着不动时,它会在车内返回:/ 并且根本不返回、或。 我应该知道的活动识别API是否有任何更改? 如果你需要更多的细节,请告诉我。

  • 我用Google API对自然对话的语音识别取得了很好的效果,但是对于Youtube视频或电影中的声音,识别效果很差或根本不存在。 在iPhone 4上录制西班牙语到英语的声音是可以识别的,但在电影中使用同一部手机几乎是不可能的,即使是一个角色在几乎没有背景噪音的情况下说话的场景。只有一次成功。 我试图清理声音与SoX(声音交换)使用噪声和comand efects,没有任何成功。 有什么想法吗?

  • 我正在开发一个android应用程序,它将监听语音命令并相应地触发动作。 以下是一些疑问: > 谷歌语音识别离线库是否可用于android应用程序 我们能创建自己的词汇词典吗 应用程序应在脱机模式下工作(无Internet)。

  • 我正在制作一个应用程序,使用ActivityRecognition API跟踪用户在后台的活动,如果用户在指定的时间段(例如1小时)内保持在同一位置,则系统会推送通知,告诉用户散步。我已经实现了活动识别,但仅适用于打开应用程序的情况。显然,Google API客户端需要保持连接才能发送活动更新。我的问题是-对于后台活动跟踪,什么是更好的解决方案: 1)在主活动(或单独活动)中实现警报管理器,该活动

  • 我试图在项目中使用活动识别来检测用户何时“在车内”。(驾驶)问题是几乎不可能使用它,因为大多数可能的活动经常报告“车内”,即使我已经在办公桌前坐了很长时间,或者只是在家里走来走去。很高兴知道API是如何得出这一结论的。 我认为这个功能有很大的潜力,但现在有些东西显然不起作用。 这是一份每30秒进行一次的最有可能的活动日志,以显示我的意思。坐在办公桌前,4分钟后,我把电话转了几次,结果是“最有可能的

  • 我正在玩Google Cloud Speech API。我想知道我是否使用python语音识别库并调用google cloud语音API,这仍然是使用API的有效方式吗?我只想转录文本。 我对它们之间的区别感到困惑,如果我只想转录音频,是否有任何建议的方法。 使用Python语音识别: 不使用Python SpeechRecognition: