Долгая задержка получения уведомления об изменении громкости - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть приложение, которое я обновляю с очень старой версии до Android Pie.Он реагирует на изменения громкости звонка телефона, когда пользователь нажимает боковую клавишу.Мой код ниже.Мой targetSdkVersion - 28

У меня два аппаратных устройства.На Marshmallow Galaxy S3 все работает нормально, но на устройстве Pie Pixel 2 иногда очень большая задержка между временем, когда я меняю громкость звонка, и тем, когда мой обозреватель контента получает вызов onChange.При переключении звонка из вкл / выкл задержка обычно составляет около 5 секунд, но иногда она может составлять 30 секунд или более.Обычно переход от звонка к звонку происходит быстрее.

Что может объяснить это?

public class VolumeService extends Service
{
    private VolumeService.VolumeContentObserver observer = null;
    private static Notification notification = null;
    private static int notificationID = 1;
    @Override
    public void onCreate()
    {
        super.onCreate();
        observer = new VolumeService.VolumeContentObserver( this );
        Intent mainIntent = new Intent( this, MainActivity.class );
        mainIntent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TASK );
        Notification.Builder builder = new Notification.Builder( this )
                .setContentTitle( getString( R.string.notification_title ) )
                .setContentText( getString( R.string.notification_text ) )
                .setSmallIcon( R.drawable.ic_audio_vol )
                .setContentIntent( PendingIntent.getActivity( this, 0, mainIntent, 0 ) );
        if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O )
            builder.setChannelId( getString( R.string.channel_id ) );
        notification = builder.build();
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        observer.register();
        startForeground( notificationID, notification );
        return START_STICKY;
    }
    @Override
    public IBinder onBind( Intent intent )
    {
        return null;
    }
    private class VolumeContentObserver extends ContentObserver
    {
        private Context context = null;
        VolumeContentObserver( Context context )
        {
            super( new Handler() );
            this.context = context;
        }
        void register()
        {
            context.getApplicationContext().getContentResolver()
                    .registerContentObserver( android.provider.Settings.System.CONTENT_URI, true, this );
        }
        @Override
        public void onChange(boolean selfChange)
        {
            super.onChange( selfChange );
            Log.d("VolumeService", "volume changed");
        }
    }
}

1 Ответ

0 голосов
/ 03 декабря 2018

Я обнаружил, что на некоторых устройствах вы не получили volume_ring или volume_music изменений в ContentObserver.Вам нужно использовать широковещательный приемник с intentFilter RINGER_MODE_CHANGED_ACTION.Я думаю, что pixel также использует этот вещательный приемник. RINGER_MODE_CHANGED_ACTION также используется для определения режимов громкости, таких как беззвучный, громкий и т. Д.

см. Ссылку также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...