Is my broadcast receiver explicit or implicit?

我的梦境 提交于 2019-12-24 17:53:12

问题


after reading some manuals (1,2) about this I still need help. I am targeting my app to android O and on android 7.0 it work fine but on 8.1 I don`t seem to get any broadcast. So, if targeting android O in manifest and running on 7.0 and using implicit broadcast should it still work? Can you please help me determine if my broadcast is explicit or implicit? I am using Awareness API...

Manifest:

   <receiver android:name=".DetectionBroadcastReceiver" >
        <intent-filter>
            <action android:name="childincar.com.michlindevelopment.DETECTIONFENCE" />
        </intent-filter>
    </receiver>

DetectionBroadcastReceiver

public class DetectionBroadcastReceiver extends BroadcastReceiver {

    Context context;

    @Override
    public void onReceive(Context context, Intent intent) {


        Log.d("DTAG", "onReceive");
        this.context = context;

        if (!TextUtils.equals(Constans.FENCE_RECEIVER_ACTION, intent.getAction())) {
            return;
        }

        //Some Code
    }
}

Constans

public class Constans {
    public static final String FENCE_RECEIVER_ACTION = BuildConfig.APPLICATION_ID + ".DETECTIONFENCE";
}

Registering

 public static void registerFences(final Context context) {

        Intent intent = new Intent(Constans.FENCE_RECEIVER_ACTION);
        PendingIntent mPendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);


        Awareness.getFenceClient(context).updateFences(new FenceUpdateRequest.Builder()
                .addFence(Constans.DETECTION_FENCE_DRIVING, DetectedActivityFence.starting(DetectedActivity.IN_VEHICLE), mPendingIntent)
                .addFence(Constans.DETECTION_FENCE_WALKING, DetectedActivityFence.starting(DetectedActivity.WALKING), mPendingIntent)
                .build())
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }
                });
    }

回答1:


Any broadcast that is not 'specific' to your app is implicit. For example the broadcast receiver for 'ACTION_MY_PACKAGE_REPLACED' is specific to your app and should be explicit and the 'ACTION_PACKAGE_REPLACED' is implicit because it informs you about all packages.

Your broadcast receiver seems implicit since it is not just about/designed-for 'your' application.



来源:https://stackoverflow.com/questions/50998444/is-my-broadcast-receiver-explicit-or-implicit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!