Приемник широковещания для DATE_CHANGED не работает только для TIMEZONE_CHANGED - PullRequest
0 голосов
/ 06 марта 2019

Я не могу заставить свой BroadcastReciever () работать для DATE_CHANGED, но прекрасно работает для TIMEZONE_CHANGED.

class DateChangeReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        Log.d("my broadcast","works")
        if (intent.action == Intent.ACTION_DATE_CHANGED ||
                intent.action == Intent.ACTION_TIMEZONE_CHANGED) {
            var netUtils = NetUtils(context)
            netUtils.mainStack()
        }
    }
}

Вот мой манифест

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/castle"
        android:roundIcon="@drawable/castle"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.intent.action.VIEW" />

            </intent-filter>
        </activity>
        <receiver android:name=".DateChangeReceiver">
            <intent-filter>
                <action android:name="android.intent.action.DATE_CHANGED"/>
                <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

Вот моя функция в моей основной деятельности:

 fun keepAlive() {

    //KEEP RUNNING IN BACKGROUND TO UPDATE WALLPAPER AT CHANGE OF DAY
     val component = ComponentName(this@MainActivity, DateChangeReceiver::class.java)
    packageManager.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)
     Log.d("KEEPALIVE FUN","works")

 }

keepAlive()

Я ничего не получаю в logcat, когда меняю дату вручную или устанавливаю время на 11:59 и жду минуты.

У меня есть несколько ошибок в logcat, которые появляются до того, как я добавил Reciever:

2019-03-05 11:48:01.884 29176-29202/com.test E/libc: Access denied finding property "vendor.debug.egl.profiler"
2019-03-05 11:48:07.616 29176-29234/com.test E/libc: Access denied finding property "ro.vendor.graphics.memory"
2019-03-05 11:48:07.665 29176-29234/com.test E/libc: Access denied finding property "vendor.gralloc.enable_ahardware_buffer"

Возможно ли, что они влияют на мой BroadcastReciever? Я проверял это на 3 устройствах до сих пор.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Решил проблему, переключившись на AlarmManager. Вот код, если кому-то интересно:

val calendar: Calendar = Calendar.getInstance().apply {
    timeInMillis = System.currentTimeMillis()
    set(Calendar.HOUR_OF_DAY, 3)
}

Этот метод работал лучше для меня, поскольку он поддерживает обновление всех приложений с моим приложением одновременно с началом нового дня.

val alarmMgr = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val broadcastIntent = Intent(this, DateChangeReceiver::class.java)
val pIntent = PendingIntent.getBroadcast(this,0,broadcastIntent,0)

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
        calendar.timeInMillis,
        AlarmManager.INTERVAL_DAY,
        pIntent
0 голосов
/ 06 марта 2019

Согласно этому вопросу , может быть ошибка . Сейчас он устарел, но вы можете попробовать отправить новый выпуск.

Также этот вопрос может вам помочь.

Они используют

ACTION_TIME_TICK

ACTION_TIMEZONE_CHANGED

ACTION_TIME_CHANGED

private final BroadcastReceiver m_timeChangedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(Intent.ACTION_TIME_CHANGED) ||
            action.equals(Intent.ACTION_TIMEZONE_CHANGED))
        {
            doWorkSon();
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...