Android 使用新的GoogleApiClient ActivityRecognition永不激发意图

Android 使用新的GoogleApiClient ActivityRecognition永不激发意图,android,android-intent,google-play-services,Android,Android Intent,Google Play Services,我一直在尝试将样本从手动移植到新的GoogleAppClient 不幸的是,我有时只从ActivityRecognition获得1次更新,大多数情况下没有 为了找出问题所在,我将代码简化为尽可能少的行。没有检查Google Play服务,也没有错误处理: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the main l

我一直在尝试将样本从手动移植到新的GoogleAppClient

不幸的是,我有时只从ActivityRecognition获得1次更新,大多数情况下没有

为了找出问题所在,我将代码简化为尽可能少的行。没有检查Google Play服务,也没有错误处理:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set the main layout
    setContentView(R.layout.activity_main);


    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(ActivityRecognition.API)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle bundle) {
                    Log.d("ActivityRecognition", "Google Play Services connected");
                    Intent i = new Intent(MainActivity.this, ActivityRecognitionIntentService.class);
                    PendingIntent mActivityRecognitionPendingIntent = PendingIntent.getService(MainActivity.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
                    ActivityRecognition.ActivityRecognitionApi.
                            requestActivityUpdates(mGoogleApiClient, 1000, mActivityRecognitionPendingIntent);
                }

                @Override
                public void onConnectionSuspended(int i) {

                }
            })
            .build();

    mGoogleApiClient.connect();

}
ActivityRecognitionIntentService包含示例中的所有代码,但在
onHandleIntent
的开头添加了一个日志,希望看到“某些事情”发生

public class ActivityRecognitionIntentService extends IntentService {

    ...

    /**
     * Called when a new activity detection update is available.
     */
    @Override
    protected void onHandleIntent(Intent intent) {

        Log.d("ActivityRecognitionIntentService", "onHandleIntent " + ActivityRecognitionResult.hasResult(intent));

       ...

    }
}
最后是舱单:

    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="21" />
    <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>

    <application android:label="@string/app_name"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/Theme.Sample">

        <activity android:name=".MainActivity"
            android:label="@string/app_name"
            android:uiOptions="splitActionBarWhenNarrow" android:description="@string/app_description">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".ActivityRecognitionIntentService"></service>

    </application>

</manifest>



任何关于我做错了什么的想法都是值得赞赏的。

似乎问题与吊挂帐篷的建造有关

PendingIntent.getService(MainActivity.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
如果我将代码更改为:

PendingIntent.getService(MainActivity.this, (int)Math.random(), i, PendingIntent.FLAG_UPDATE_CURRENT);
意图开始开火

关于第二个参数,请参阅getService()的文档:

requestCode发件人的专用请求代码


因此,没有明显的理由表明该参数会对意图是否被激发产生任何影响。

添加
Math.Random
并不能解决我的问题

在我的例子中,我忘记将
服务
添加到
AndroidManifest
。 见: