你可以找到我在這裏創建的示例項目。
https://github.com/cyfung/ActivityRecognitionSample
重要提示:你可能無法獲得數據頻繁按照您的要求!
在API 21開始,活動可被較不頻繁地比 接收的detectionIntervalMillis參數如果設備處於節能模式 和屏幕是關閉的。
關鍵組件:
在onCreate
mGoogleApiClient =
new GoogleApiClient.Builder(this).addApi(ActivityRecognition.API)
.addConnectionCallbacks(this).addOnConnectionFailedListener(this).build();
連接創建GoogleApiClient和onStart
和onStop
斷開API客戶,如谷歌API文檔中建議。
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
mStatusView.setText("connecting");
}
@Override
protected void onStop() {
super.onStop();
mGoogleApiClient.disconnect();
mStatusView.setText("disconnected");
}
開始活動識別(不應在Google Api連接之前調用)。使用PendingIntent.getService
來創建掛起的意圖回調。
final PendingResult<Status>
statusPendingResult =
ActivityRecognition.ActivityRecognitionApi
.requestActivityUpdates(mGoogleApiClient, DETECT_INTERVAL, PendingIntent
.getService(this, 0, new Intent(this, ActivityDetectionService.class),
PendingIntent.FLAG_UPDATE_CURRENT));
statusPendingResult.setResultCallback(this);
IntentService
是標準的方法,建議回調
public class ActivityDetectionService extends IntentService {
protected static final String TAG = "activityDetectionService";
public ActivityDetectionService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
final ActivityRecognitionResult
activityRecognitionResult =
ActivityRecognitionResult.extractResult(intent);
if (activityRecognitionResult == null) {
return;
}
//process the result here, pass the data needed to the broadcast
// e.g. you may want to use activityRecognitionResult.getMostProbableActivity(); instead
final List<DetectedActivity>
probableActivities =
activityRecognitionResult.getProbableActivities();
sendBroadcast(MainActivity.newBroadcastIntent(probableActivities));
}
}
清單中註冊該服務。
<service
android:name=".ActivityDetectionService"
android:exported="false">
</service>
要使用API,還需要在清單中添加以下內容。
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
找回數據,我用的onCreate
mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
...
}
}
註冊創建一個BroadcastReceiver的活動,分別onResume
和註銷。
@Override
protected void onResume() {
super.onResume();
registerReceiver(mBroadcastReceiver, newBroadcastIntentFilter());
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mBroadcastReceiver);
}
我們會更好地理解一段代碼。 – dhams
posted/edited .. – steve
您應該編輯問題的標題和正文以表明「活動」不是指「android.app.Activity」,而是指「健身活動」字符串。 –