簡體   English   中英

Android 12 - 后台廣播接收器的活動識別不工作

[英]Android 12 - Activity Recognition With broadcast receiver in background not working

我正在嘗試通過ActivityRecognition API 獲取用戶活動狀態,它在前台工作,也在后台工作幾個小時(當用戶退出應用程序時),但超過 4/5 小時后,它停止通過ActivityRecognition API 發送用戶活動狀態。

在主活動中設置活動識別和注冊 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");
                }
            });
    }

同時在 Manifest 中注冊 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 的任何廣播。知道為什么會發生這種情況嗎?

我在新更新時也遇到了這個問題,但經過更深入的調試后我意識到它確實有效但檢索數據需要更多時間,所以請耐心等待或運行更長時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM