0

I'm currently working on a simple android app. The idea is, it changes the wallpaper automatically after 12 A.M or when the date is changed. It's working on android Oreo and lower versions, however, it doesn't work on android 9(Pie). However, if I change the date manually from the setting of the phone, it calls the broadcast. I have googled a lot, and some suggested to register the broadcast on your java codes instead of Manifest. Unfortunately, it didn't work.

I have tested this question in Stackoverflow. First of all, changing the date is not part of implicit broadcasts, secondly, I assumed it is. then I changed the codes but it didn't work. Now I'm gonna provide some codes of my broadcast:

DailyBroadcastReceiverService


    public class DailyBroadcastReceiverService extends Service {
       private BroadcastReceiver dailyZekrBr;
       private Context context;

       @Nullable
       @Override
       public IBinder onBind(Intent intent) {
           return null;
       }

       @Override
       public void onCreate() {
           super.onCreate();
           registerDailyZekrReceiver();
       }

       @Override
       public void onDestroy() {
           super.onDestroy();
           unregisterReceiver(dailyZekrBr);
           dailyZekrBr = null;
       }



       private void registerDailyZekrReceiver() {
           context= this.getApplicationContext();
           Log.d("Register", "onStart: Now gonna register the broadcast receiver on Daily Boadcast receiver");

           dailyZekrBr = new DailyZekrBroadcastReceiver();
           IntentFilter filter = new IntentFilter();
          filter.addCategory(Intent.CATEGORY_DEFAULT);

           filter.addAction("android.intent.action.ACTION_TIME_CHANGED");
           filter.addAction("android.intent.action.TIME_SET");
           filter.addAction("android.intent.action.DATE_CHANGED");
           filter.addAction("android.intent.action.TIMEZONE_CHANGED");
           this.registerReceiver(dailyZekrBr, filter);
       }
   }

DailyZekrBroadcastReceiver

        public class DailyZekrBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("DailyZekrBroadcast", "onReceive:The broadcast is called ");
            DailyZekrHandler.setTodayImage(context);
        }


    }

setTodayImage

public static void setTodayImage(Context context) {
    int todayImage = DailyZekrHandler.nameOfTheWeek();

    DisplayMetrics metrics = new DisplayMetrics();
    WindowManager window = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    window.getDefaultDisplay().getMetrics(metrics);

    Log.d("DailyZekrBroadCast", "trying to change imge: " + todayImage);

    if(todayImage != DailyZekrHandler.getTodayImage(context)) {
        DailyZekrHandler.storeTodayImage(context);

        Bitmap tempbitMap = BitmapFactory.decodeResource(context.getResources(), todayImage);
        Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap, metrics.widthPixels, metrics.heightPixels, true);

        WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
        wallpaperManager.setWallpaperOffsetSteps(1, 1);
        wallpaperManager.suggestDesiredDimensions(metrics.widthPixels, metrics.heightPixels);

        try {
            wallpaperManager.setBitmap(bitmap);
            Log.d("DailyZekrBroadCast", "today_image: " + todayImage);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Manifest.xml

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

        <uses-permission android:name="android.permission.SET_WALLPAPER" />
        <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

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

            <meta-data
                android:name="com.google.android.gms.ads.APPLICATION_ID"
                android:value="ca-app-pub-9778979220370457~9773548477"/>

            <receiver android:name=".core.DailyZekrBroadcastReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.ACTION_TIME_CHANGED"/>
                    <action android:name="android.intent.action.TIME_SET"/>
                    <action android:name="android.intent.action.DATE_CHANGED"/>
                    <action android:name="android.intent.action.TIMEZONE_CHANGED" />
                </intent-filter>
            </receiver>

            <service android:name=".core.DailyBroadcastReceiverService"/>

            <activity android:name=".SplashActivity" android:theme="@style/Theme.AppCompat.NoActionBar">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

            <activity
                android:name=".MainActivity"
                android:label="@string/app_name"
                android:theme="@style/AppTheme.NoActionBar">
            </activity>
        </application>

    </manifest>

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Abdu4
  • 1,269
  • 2
  • 11
  • 19
  • A bit confused about your question. 1.Do you use AlarmManager to trigger BroadcastReceiver at every 12AM? 2. BroadcastReceiver not call when changing date means manually changing date from device setting or date change normally? – Chan Myae Aung Dec 11 '19 at 10:32
  • No, I'm not using AlarmManager. Only Broadcast Receiver is supposed to trigger when the day is changed. And yes, it's working fine in android Oreo and other lower versions, but now in Pie. In the second part, when I change the date from settting of the phone it triggers the broadcast well. – Abdu4 Dec 11 '19 at 11:06

0 Answers0