Мой вещательный приемник явный или неявный?

После прочтения некоторых руководств ( 1, 2) по этому поводу мне все еще нужна помощь. Я нацеливаю свое приложение на Android O, и на Android 7.0 оно работает нормально, но на 8.1 я не получаю никакой трансляции. Итак, если нацеливание на Android O в манифесте и запуск на 7.0 и использование неявной трансляции все еще будет работать? Не могли бы вы помочь мне определить, является ли моя трансляция явной или неявной? Я использую 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
    }
}

Констант

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

регистрирующий

 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 ответ

Решение

Любая трансляция, которая не является "специфичной" для вашего приложения, является неявной. Например, широковещательный приемник для ACTION_MY_PACKAGE_REPLACED специфичен для вашего приложения и должен быть явным, а ACTION_PACKAGE_REPLACED - неявным, поскольку информирует вас обо всех пакетах.

Ваш широковещательный приемник кажется неявным, поскольку он предназначен не только для "вашего" приложения.

Другие вопросы по тегам