I got some example for activity recognition from here
The thing is I wish to update my GUI with the results, so I have tried with callback but I get null exception. Can you please help me or give other option?
Main Class:
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, MyCallback {
public GoogleApiClient mApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mApiClient = new GoogleApiClient.Builder(this)
.addApi(ActivityRecognition.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mApiClient.connect();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
Intent intent = new Intent(this, ActivityRecognizedService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mApiClient, 3000, pendingIntent);
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void callbackCall(int i)
{
//Here will be gui Update
Log.d("DTAG", "is: "+i);
}
}
Callback interface:
interface MyCallback {
void callbackCall(int i);
}
ActivityRecognizedService:
public class ActivityRecognizedService extends IntentService {
MyCallback callback;
public ActivityRecognizedService() {
super("ActivityRecognizedService");
}
public ActivityRecognizedService(String name) {
super(name);
}
@Override
protected void onHandleIntent(Intent intent) {
if(ActivityRecognitionResult.hasResult(intent)) {
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
handleDetectedActivities( result.getProbableActivities() );
}
}
void onEvent() {
}
private void handleDetectedActivities(List<DetectedActivity> probableActivities) {
for( DetectedActivity activity : probableActivities ) {
switch( activity.getType() ) {
case DetectedActivity.IN_VEHICLE: {
Log.e( "ActivityRecogition", "In Vehicle: " + activity.getConfidence() );
callback.callbackCall(activity.getConfidence());
//return value for GUI update
break;
}
case DetectedActivity.UNKNOWN: {
Log.e( "ActivityRecogition", "Unknown: " + activity.getConfidence() );
break;
}
}
}
}
}
Exception:
java.lang.NullPointerException: Attempt to invoke interface method 'void dan.com.movetest.MyCallback.callbackCall(int)' on a null object reference
at dan.com.movetest.ActivityRecognizedService.handleDetectedActivities(ActivityRecognizedService.java:49)
at dan.com.movetest.ActivityRecognizedService.onHandleIntent(ActivityRecognizedService.java:36)