Android
활동 인정
수색…
소개
활동 인식은 드라이브가 감지 될 때 점을 찍거나, 전화가 멈출 때 WiFi를 끄거나, 사용자가있을 때 최대로 링 볼륨을 설정하는 것과 같이 장치에서 특정 동작을 수행하기 위해 사용자의 신체 활동을 감지하는 것입니다 보행.
Google Play ActivityRecognitionAPI
이것은 GooglePlay Service의 ActivityRecognitionApi를 사용하는 방법의 간단한 예입니다. 위대한 라이브러리이지만 Google Play 서비스가 설치되지 않은 기기에서는 작동하지 않습니다.
명백한
<!-- This is needed to use Activity Recognition! -->
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".ActivityReceiver" />
</application>
MainActivity.java
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient apiClient;
private LocalBroadcastManager localBroadcastManager;
private BroadcastReceiver localActivityReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
apiClient = new GoogleApiClient.Builder(this)
.addApi(ActivityRecognition.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
//This just gets the activity intent from the ActivityReceiver class
localBroadcastManager = LocalBroadcastManager.getInstance(this);
localActivityReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ActivityRecognitionResult recognitionResult = ActivityRecognitionResult.extractResult(intent);
TextView textView = (TextView) findViewById(R.id.activityText);
//This is just to get the activity name. Use at your own risk.
textView.setText(DetectedActivity.zzkf(recognitionResult.getMostProbableActivity().getType()));
}
};
}
@Override
protected void onResume() {
super.onResume();
//Register local broadcast receiver
localBroadcastManager.registerReceiver(localActivityReceiver, new IntentFilter("activity"));
//Connect google api client
apiClient.connect();
}
@Override
protected void onPause() {
super.onPause();
//Unregister for activity recognition
ActivityRecognition.ActivityRecognitionApi.removeActivityUpdates(apiClient, PendingIntent.getBroadcast(this, 0, new Intent(this, ActivityReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT));
//Disconnects api client
apiClient.disconnect();
//Unregister local receiver
localBroadcastManager.unregisterReceiver(localActivityReceiver);
}
@Override
public void onConnected(@Nullable Bundle bundle) {
//Only register for activity recognition if google api client has connected
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(apiClient, 0, PendingIntent.getBroadcast(this, 0, new Intent(this, ActivityReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT));
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
ActivityReceiver
public class ActivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LocalBroadcastManager.getInstance(context).sendBroadcast(intent.setAction("activity"));
}
}
PathSense 활동 인식
PathSense 활동 인식은 자체 활동 인식 모델을 구축 했으므로 Google Play 서비스가없는 기기에 적합한 또 다른 라이브러리이지만 http://developer.pathsense.com 에서 개발자가 API 키와 클라이언트 ID를 받기 위해 등록해야합니다. .
명백한
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".ActivityReceiver" />
<!-- You need to acquire these from their website (http://developer.pathsense.com) -->
<meta-data
android:name="com.pathsense.android.sdk.CLIENT_ID"
android:value="YOUR_CLIENT_ID" />
<meta-data
android:name="com.pathsense.android.sdk.API_KEY"
android:value="YOUR_API_KEY" />
</application>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private PathsenseLocationProviderApi pathsenseLocationProviderApi;
private LocalBroadcastManager localBroadcastManager;
private BroadcastReceiver localActivityReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pathsenseLocationProviderApi = PathsenseLocationProviderApi.getInstance(this);
//This just gets the activity intent from the ActivityReceiver class
localBroadcastManager = LocalBroadcastManager.getInstance(this);
localActivityReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//The detectedActivities object is passed as a serializable
PathsenseDetectedActivities detectedActivities = (PathsenseDetectedActivities) intent.getSerializableExtra("ps");
TextView textView = (TextView) findViewById(R.id.activityText);
textView.setText(detectedActivities.getMostProbableActivity().getDetectedActivity().name());
}
};
}
@Override
protected void onResume() {
super.onResume();
//Register local broadcast receiver
localBroadcastManager.registerReceiver(localActivityReceiver, new IntentFilter("activity"));
//This gives an update everytime it receives one, even if it was the same as the last update
pathsenseLocationProviderApi.requestActivityUpdates(ActivityReceiver.class);
// This gives updates only when it changes (ON_FOOT -> IN_VEHICLE for example)
// pathsenseLocationProviderApi.requestActivityChanges(ActivityReceiver.class);
}
@Override
protected void onPause() {
super.onPause();
pathsenseLocationProviderApi.removeActivityUpdates();
// pathsenseLocationProviderApi.removeActivityChanges();
//Unregister local receiver
localBroadcastManager.unregisterReceiver(localActivityReceiver);
}
}
ActivityReceiver.java
// You don't have to use their broadcastreceiver, but it's best to do so, and just pass the result
// as needed to another class.
public class ActivityReceiver extends PathsenseActivityRecognitionReceiver {
@Override
protected void onDetectedActivities(Context context, PathsenseDetectedActivities pathsenseDetectedActivities) {
Intent intent = new Intent("activity").putExtra("ps", pathsenseDetectedActivities);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow