安卓12-活动识别与广播接收器在后台不工作



我正在尝试通过ActivityRecognitionAPI获取用户活动状态,它在前台工作,在后台也工作几个小时(当用户退出应用程序时(,但超过4/5小时后,它停止通过ActivityRecognitionAPI发送用户活动状态。

在主活动中设置活动识别和注册BroadcastReceiver

public static void ActivityRecognitionSetup() {
final String TRANSITIONS_RECEIVER_ACTION = "com.example.TRANSITIONS_RECEIVER_ACTION";
Intent mintent = new Intent(TRANSITIONS_RECEIVER_ACTION);
ActivityRecognitionClient client = ActivityRecognition.getClient(context);
PendingIntent pendingIntent;
if (App_Functions.runningSOrLater){
pendingIntent = PendingIntent.getBroadcast(Application.getmContext(), 255, mintent, PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_MUTABLE);
}else {
pendingIntent = PendingIntent.getBroadcast(MyApplication.getmContext(), 255, mintent, PendingIntent.FLAG_UPDATE_CURRENT);
}
ActivityRecognitionBroadcastReceiver broadcastReceiver = new ActivityRecognitionBroadcastReceiver();
Task<Void> task = client.requestActivityUpdates(6 * 60 * 60 * 1000, pendingIntent);
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void unused) {
Log.d(TAG, "onSuccess: Activity recognition Started");
context.registerReceiver(broadcastReceiver, new IntentFilter(TRANSITIONS_RECEIVER_ACTION));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: Activity recognition Failed");
}
});
}

还在清单中注册BR

<receiver
android:name=".ActivityRecognitionBroadcastReceiver"
android:exported="false"
android:permission="com.google.android.gms.permission.ACTIVITY_RECOGNITION">
<intent-filter>
<action android:name="com.example.TRANSITIONS_RECEIVER_ACTION"/>
</intent-filter>
</receiver>

广播接收机

public class ActivityRecognitionBroadcastReceiver extends BroadcastReceiver {

final String TRANSITIONS_RECEIVER_ACTION ="com.example.TRANSITIONS_RECEIVER_ACTION";
@Override
public void onReceive(Context context, Intent intent) {
if (!TextUtils.equals(TRANSITIONS_RECEIVER_ACTION, intent.getAction())) {            
return;
}

if (ActivityRecognitionResult.hasResult(intent)) {
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
// This Method Will Show Notification On Every Activity Recognition Detection
showNotification("Activity Recognition "+activity.getConfidence(),result.getProbableActivities())
}else{
Log.d(TAG, "ActivityRecognition Has NO Result "+ActivityRecognitionResult.hasResult(intent));
}
}
}

即使在空闲状态下,设备也会收到通知,但在4-5小时或更长时间后,它将停止接收来自活动识别api的任何广播。你知道为什么会这样吗?

我在新的更新中也遇到了这个问题,但经过更深入的调试,我意识到它确实有效,但检索数据需要更多的时间,所以耐心等待或运行更长时间的

最新更新