2

I tried to change Lockscreen Wallpaper but I got an Error like this

D/permissions_handler( 5642): No android specific permissions needed for: 9
I/flutter ( 5642): Android Storage Permission Status: PermissionStatus.denied
I/System.out( 5642): ImageGallerySaverPlugin 80
I/e.wallpaperapp( 5642): Waiting for a blocking GC ProfileSaver
I/e.wallpaperapp( 5642): WaitForGcToComplete blocked ProfileSaver on ProfileSaver for 24.060ms

I testing in android 10 (API 29)and Android 11 (API 30) and Storage Permission on Android Always denied here is my code for permission handling

 _askPermission() async {
    if (io.Platform.isIOS) {
      var photosStatus = await Permission.photos.status;
      if (photosStatus.isDenied) {
        await Permission.photos.request();
        print("Photos Permission Status" + photosStatus.toString());
      }
    } else {
      var photoStatus = await Permission.photos.status;
      var storageStatus = await Permission.storage.status;
      if (storageStatus.isDenied) {
        await Permission.storage.request();
        print("Android Storage Permission Status: " + storageStatus.toString());

      } else if (photoStatus.isDenied) {
        await Permission.photos.request();
        print("Android Photos Permission Status: " + photoStatus.toString());
      }
      // Map<Permission, PermissionStatus> statuses = await [Permission.storage].request();
      // print(statuses[Permission.storage]);

    }
  }

and here is an implementation for saving and set Wallpaper on lockreen and homescreen

// saving image to gallery function
  _save() async {
    if (io.Platform.isAndroid){
      await _askPermission();
    }

    var response = await Dio().get(
      widget.imgUrl,
      options: Options(responseType: ResponseType.bytes)
    );
    final result = await ImageGallerySaver.saveImage(Uint8List.fromList(response.data));
    print(result);
    print('default path: '+ result['filePath'].toString());

    // set wallpaper to home Screen and LockScreem
    // int lockScreenLocation = WallpaperManager.LOCK_SCREEN;
    // int homeScreenLocation = WallpaperManager.HOME_SCREEN;
    int bothScreenLocation = WallpaperManager.BOTH_SCREENS;

    // set path image
    final imagePath = result['filePath'].toString().replaceAll(RegExp('file://'), '');

    // setting wallpaper
    String setBoth;
    // String setLockScreen;
    // String setHomeScreen;
    try {
      // setLockScreen = await WallpaperManager.setWallpaperFromFile(imagePath, lockScreenLocation);
      // setHomeScreen = await WallpaperManager.setWallpaperFromFile(imagePath, homeScreenLocation);
      setBoth = await WallpaperManager.setWallpaperFromFile(imagePath, bothScreenLocation);

      // print status to console
      print(setBoth);
      // print(setHomeScreen);

    } on PlatformException {
      // setLockScreen = "Failed To Set Wallpaper in LockScreen";
      // setHomeScreen = "Failed to Set Wallpaper in HomeScreen";
      setBoth = "Failed To Set Wallpaper in Both";
    }
    if (!mounted) {
      return;
    }

    Navigator.pop(context);
  }

here is my user permission setup on manifest

 package="com.example.wallpaperapps">
    <!-- Manifest -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"  android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:minSdkVersion="30" />

   <application
       android:requestLegacyExternalStorage="true"
        android:label="wallpaperapps"
        android:icon="@mipmap/ic_launcher">

....

home screen is successfully changed but failed for lockreen, anyone can help me? solve my problem?

perymerdeka
  • 766
  • 9
  • 19

0 Answers0