Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅在饼图上更改日期时不调用广播接收器_Java_Android_Mobile - Fatal编程技术网

Java 仅在饼图上更改日期时不调用广播接收器

Java 仅在饼图上更改日期时不调用广播接收器,java,android,mobile,Java,Android,Mobile,我目前正在开发一个简单的android应用程序。其想法是,它会在凌晨12点后或日期更改时自动更改壁纸。它在android Oreo和更低版本上工作,但是在android 9(Pie)上不工作。但是,如果我从手机的设置手动更改日期,它会调用广播。我在谷歌上搜索了很多,有人建议在java代码上注册广播,而不是在清单上注册。不幸的是,它不起作用 我在Stackoverflow中测试了这个问题。 首先,更改日期不是隐性广播的一部分,其次,我认为是的。然后我改变了密码,但没用。 现在我将提供我的广播的一些

我目前正在开发一个简单的android应用程序。其想法是,它会在凌晨12点后或日期更改时自动更改壁纸。它在android Oreo和更低版本上工作,但是在android 9(Pie)上不工作。但是,如果我从手机的设置手动更改日期,它会调用广播。我在谷歌上搜索了很多,有人建议在java代码上注册广播,而不是在清单上注册。不幸的是,它不起作用

我在Stackoverflow中测试了这个问题。 首先,更改日期不是隐性广播的一部分,其次,我认为是的。然后我改变了密码,但没用。 现在我将提供我的广播的一些代码:

每日广播接收服务


    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);
       }
   }
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();
        }
    }
}
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 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);
       }
   }
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>



对你的问题有点困惑。1.是否每12点使用AlarmManager触发BroadcastReceiver?2.更改日期时BroadcastReceiver不呼叫意味着从设备设置手动更改日期或正常更改日期?不,我没有使用AlarmManager。只有广播接收器应该在日期改变时触发。是的,它在android Oreo和其他较低版本中运行良好,但现在在Pie中。在第二部分中,当我更改手机设置的日期时,它会触发广播。