Приемник Transition Распознавание активности не работает - PullRequest
0 голосов
/ 22 октября 2018

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

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

Проблема, с которой я сталкиваюсь, заключается в том, что широковещательный приемник, хотя он явный (поэтому он не должен зависеть от новых ограничений на приемники для Android), не запускается.Я следовал инструкциям о том, как правильно использовать 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: ");


}

Заранее благодарю за любую помощь

...