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?