Приложение Android не обнаруживает изменения активности велосипедистаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение Android не обнаруживает изменения активности велосипедиста

Сообщение Anonymous »

У меня есть приложение для Android, с помощью которого я пытаюсь обнаружить изменения в активности пользователей. Приложение имеет разрешение пользователя на обнаружение активности пользователя. У меня есть внешний и внутренний приемники вещания, внешний приемник вещания должен определять, когда пользователь начал ездить на велосипеде, затем он отправляет намерение с фильтром на внутренний приемник вещания приложения, который должен установить текст в TextView, чтобы пользователь начал ехать на велосипеде, когда внешний приемник вещания обнаруживает, что пользователь прекратил езду на велосипеде и идет пешком, он запускает намерение с фильтром, согласно которому пользователь прекратил езду на велосипеде, на внутренний приемник, который соответствующим образом изменяет TextView. Трансляция не запускается, помогите мне ее запустить, вот логика в Java-файле основного действия.
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
//call method to start requesting activity updates
requestBikeActivityUpdates();
}
}
//method to request activity updates
@RequiresApi(api = Build.VERSION_CODES.Q)
private void requestBikeActivityUpdates() {
ActivityRecognitionClient client = ActivityRecognition.getClient(this);
ActivityTransitionRequest request = new ActivityTransitionRequest(
Arrays.asList(
new ActivityTransition.Builder().setActivityType(DetectedActivity.ON_BICYCLE).setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER).build(), new ActivityTransition.Builder().setActivityType(DetectedActivity.ON_BICYCLE).setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT).build()));

PendingIntent pendingIntent = PendingIntent.getBroadcast(
this, 0, new Intent("com.google.android.gms.location.ACTIVITY_TRANSITION_RESULT"), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACTIVITY_RECOGNITION) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(
this, new String[] {
Manifest.permission.ACTIVITY_RECOGNITION
},
909);
return;
}
Task < Void > task = client.requestActivityTransitionUpdates(request, pendingIntent);

task.addOnSuccessListener(unused - >Toast.makeText(getApplicationContext(), "task succeeded", Toast.LENGTH_SHORT).show());

task.addOnFailureListener(e - >Toast.makeText(getApplicationContext(), "task failed", Toast.LENGTH_SHORT).show());
}

Реализация внешнего и внутреннего приемников вещания приведена ниже.
Внешний приемник вещания велосипеда
public class BikeActivityReceiver extends BroadcastReceiver {@Override
public void onReceive(Context context, Intent intent) {

// The correct API for activity updates
if (ActivityTransitionResult.hasResult(intent)) {
ActivityTransitionResult result = ActivityTransitionResult.extractResult(intent);

assert result != null;
for (ActivityTransitionEvent event: result.getTransitionEvents()) {
if (event.getActivityType() == DetectedActivity.ON_BICYCLE) {

if (event.getTransitionType() == ActivityTransition.ACTIVITY_TRANSITION_ENTER) {
// User started biking
sendUpdate(context, true);
Log.d("Bike", "ENTER BICYCLE");
}

if (event.getTransitionType() == ActivityTransition.ACTIVITY_TRANSITION_EXIT) {
// User stopped biking
sendUpdate(context, false);
Log.d("Bike", "EXIT BICYCLE");
}
}
}
}
}
private void sendUpdate(Context ctx, boolean biking) {
Intent i = new Intent("BIKE_ACTIVITY_UPDATE");
i.putExtra("status", biking ? "biking": "not_biking");
LocalBroadcastManager.getInstance(ctx).sendBroadcast(i);
}
}

а затем внутренний приемник, который меняет текстовое представление при изменении активности
private final BroadcastReceiver receiver = new BikeActivityReceiver() {@Override
public void onReceive(Context context, Intent intent) {
String status = intent.getStringExtra("status");
assert status != null;
if (status.equals("biking")) {
bikeStatusText.setText(R.string.biking);
} else {
bikeStatusText.setText(R.string.nbiking);
}
}
};


Подробнее здесь: https://stackoverflow.com/questions/798 ... ty-changes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»