Приемник Transition Recognition Transition не работает

Я обновил API-интерфейс Activity Recognition, который отлично работает в моем приложении, до API-интерфейса Transition, который, к сожалению, не работает.

Причина, по которой я обновляюсь, заключается в том, чтобы обновить мой код в соответствии с новыми требованиями, установленными Android, в отношении ограничений фоновых процессов, ограничений приемника вещания и приложений, которые должны быть ориентированы на SDK 28 к ноябрю 2018 года.

Проблема, с которой я сталкиваюсь, заключается в том, что широковещательный приемник, хотя он явный (поэтому на новые андроиды не должны влиять новые ограничения на приемники), не запускается. Я следовал инструкциям о том, как правильно использовать API переходов, и обновил мой код в разных областях, то есть перешел со старых сервисов на теперь использующий новый JobIntentservice, который, кажется, работает, в других частях моего приложения. кажется, что все работает до момента, когда ему нужно отправить трансляцию, независимо от того, отправляет ли она сообщение или нет, я не знаю, но я знаю, что мой приемник ничего не получает.

Если кто-то сможет указать, где проблема может быть, я был бы очень благодарен. Чтобы понять, что я делаю. Я создал приложение, которое может определять, когда вы находитесь за рулем, и, как только это произойдет, оно автоматически отключит ваш телефон, чтобы вы не отвлекались на него, и оно будет отправлять смс с автоответчиком всем, кто вам звонит или отправляет текстовые сообщения. вождения.

Я разместил некоторые из моего кода ниже:

В действии настроек пользователь может включить APi перехода активности, который после активации должен отправить широковещательное намерение классу ActivityTransitionReceiver.

SettingsActivity.Java (AppCompatPreferenceActivity)

    @Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {

    Log.i(TAG, "onSharedPreferenceChanged() ");

    prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());


    final PackageManager packageManager  = getApplicationContext().getPackageManager();
    final ComponentName ActivityTransitionComponent = new ComponentName(getApplicationContext(), ActivityTransitionReceiver.class);


    ActivityTransitions activityTransitions = new ActivityTransitions();
    Intent startAcrIntent = new Intent (getApplicationContext(), ActivityTransitionReceiver.class);
    startAcrIntent.setAction("westport.andrewirwin.com.drivesafe.ACR");

    PendingIntent acrPendingIntent = PendingIntent.getBroadcast(
            getApplicationContext(),
            0,
            startAcrIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);


    if (key.equals("autoStart_switch")) {
        Log.i(TAG, key + " changed");


        if (prefs.getBoolean("autoStart_switch", false)) {
            Log.i(TAG, "autoStart_switch: true");


            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            SharedPreferences.Editor editor = preferences.edit();




            //myPendingIntent is the instance of PendingIntent where the app receives callbacks.



            // Start Activity Transistion Recognition

            packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);


            Task<Void> task =
                    ActivityRecognition.getClient(
                            getApplicationContext()).requestActivityTransitionUpdates(
                            activityTransitions.getActivityTransitionsRequest(),
                            acrPendingIntent);




            task.addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void result) {

                    Log.i(TAG, "ACR RUNNING SUCCESS!!");


                    // packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    //       PackageManager.DONT_KILL_APP);

                    Log.i(TAG, "ActivityTransitionReceiver Enabled");
                }
            });


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

                    Log.i(TAG, "ACR FAILED TO START ");
                    packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                            PackageManager.DONT_KILL_APP);
                }
            });
            //}


        } else {
            Log.i(TAG, "autoStart_switch: false");

            if (prefs.getBoolean("bluetoothAuto_switch", false)) {
                return;
            }




            // Stop Activity Transition Recognition
            packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);

            Task<Void> task =
                    ActivityRecognition.getClient(
                            getApplicationContext()).removeActivityTransitionUpdates(acrPendingIntent);





            task.addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void result) {

                    Log.i(TAG, "ACR STOPPED ");


                    //   packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    //         PackageManager.DONT_KILL_APP);
                    Log.i(TAG, "ActivityTransitionReceiver: Disabled");

                }
            });


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

                    Log.i(TAG, "ACR FAILED TO STOP ");
                }
            });
        }
    }

}

AndroidManifest.xml

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>

     <receiver android:name=".ActivityTransitionReceiver"
        android:enabled="false"
        android:exported="true">
        <intent-filter>
            <action android:name="westport.andrewirwin.com.drivesafe.ACR"/>
        </intent-filter>
    </receiver>

ActivityTransitionReceiver

public class ActivityTransitionReceiver extends BroadcastReceiver {

private String TAG = "ActivityTransitionReceiver";




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

    Log.i(TAG, "onReceive: ");


}

Спасибо заранее за любую помощь

0 ответов

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