Hav一直试图将样本从http://developer.android.com/training/location/activity-recognition.html手动移植到新的GoogleApiClient。
不幸的是,我有时只从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>
对于我做错的任何想法都表示赞赏。
答案 0 :(得分:1)
似乎问题是否与PendingIntent
的构造有关PendingIntent.getService(MainActivity.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
如果我将该代码更改为:
PendingIntent.getService(MainActivity.this, (int)Math.random(), i, PendingIntent.FLAG_UPDATE_CURRENT);
意图开始火爆。
关于第二个参数的getService()文档:
requestCode发件人的私人请求代码
因此没有明显的理由让这个参数对意图产生任何影响,或者意图被触发。
答案 1 :(得分:0)
添加Math.Random
并不能解决问题。
就我而言,我忘了将Service
添加到AndroidManifest
。
请参阅:https://stackoverflow.com/a/29726050/1143263