Обои не подходят для экрана устройства

У меня есть один набор изображений в одной доступной папке. У меня есть одна кнопка для установки изображения в качестве обоев на экране устройства. Но когда я устанавливаю это изображение в качестве обоев, оно либо масштабируется, либо обрезается. Я хочу, чтобы изображение соответствовало размеру экрана. Я видел много ссылок на SO, но ссылка для меня не работает. Это код, который я пытаюсь сделать до сих пор.

Код-

Bitmap bmap2 = BitmapFactory.decodeStream(getResources().openRawResource(mThumb[position])); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; Bitmap bitmap = Bitmap.createScaledBitmap(bmap2, width, height, true); WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); try { wallpaperManager.setBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } 

Я также добавил следующие строки в манифест-

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

Привет. Это работает с ярким изображением, которое я проверил.

  DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; Bitmap tempbitMap = BitmapFactory.decodeResource(getResources(), R.drawable.img); Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap,width,height, true); WallpaperManager wallpaperManager = WallpaperManager.getInstance(MainActivity.this); wallpaperManager.setWallpaperOffsetSteps(1, 1); wallpaperManager.suggestDesiredDimensions(width, height); try { wallpaperManager.setBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } 

Также укажите эти разрешения в Manifest.xml ..

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

Это скриншот ..

Введите описание изображения здесь

Для сброса Установите обои экрана, сохраните путь изображения в общих настройках и используйте Boot Completed Receiver, затем сбросьте те же обои на экране ….

Приемник вещания …

 import java.io.IOException; import android.app.WallpaperManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.DisplayMetrics; import android.util.Log; import android.view.WindowManager; public class BootReceiver extends BroadcastReceiver { private static final String TAG="BootReceiver"; @Override public void onReceive(Context context,Intent intent){ try{ DisplayMetrics metrics = new DisplayMetrics(); WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; Bitmap tempbitMap = BitmapFactory.decodeResource(context.getResources(), R.drawable.img); Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap,width,height, true); WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); wallpaperManager.setWallpaperOffsetSteps(1, 1); wallpaperManager.suggestDesiredDimensions(width, height); try { wallpaperManager.setBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } }catch(Exception e){ Log.e(TAG,e.toString()); } } } 

После добавления этих строк в Manifest.xml

  <receiver android:name=".BootReceiver" android:enabled="true" android:exported="true" android:label="BootReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" > </action> </intent-filter> </receiver> 

Попробуйте этот код

 Bitmap bmap2 =BitmapFactory.decodeStream(getResources().openRawResource(mThumb[position])); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; Bitmap bitmap = Bitmap.createScaledBitmap(bmap2, width, height, true); WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); wallpaperManager.setWallpaperOffsetSteps(1, 1); wallpaperManager.suggestDesiredDimensions(width, height); try { wallpaperManager.setBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } 

Если у вас есть URL-адрес изображения, используйте:

 WallpaperManager wpm = WallpaperManager.getInstance(context); InputStream ins = new URL("absolute/path/of/image").openStream(); wpm.setStream(ins); 

Если у вас есть URI изображения, используйте

 WallpaperManager wpm = WallpaperManager.getInstance(context); wpm.setResource(Uri.of.image); 

В файле манифеста:

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

И не забудьте поместить этот код в AsyncTask .

Попробуйте этот код:

 public void changeWallpaper(String path) { FileInputStream is; BufferedInputStream bis; WallpaperManager wallpaperManager; Drawable wallpaperDrawable; File sdcard = Environment.getExternalStorageDirectory(); try { is = new FileInputStream(new File(path)); bis = new BufferedInputStream(is); Bitmap bitmap = BitmapFactory.decodeStream(bis); Bitmap useThisBitmap = Bitmap.createBitmap(bitmap); wallpaperManager = WallpaperManager.getInstance(getActivity()); wallpaperDrawable = wallpaperManager.getDrawable(); wallpaperManager.setBitmap(useThisBitmap); } catch (Exception e) { e.printStackTrace(); } } 

В этом примере я использовал изображение с device SD карты device SD

Это отлично сработало для меня ..

Обратите внимание: возможно, не работает для вас.

ты нуждаешься в этом:

 WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); try { wallpaperManager.setBitmap(bitmap); wallpaperManager.suggestDesiredDimensions(width, height); Toast.makeText(this, "Wallpaper Set", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } 

Введите ссылку здесь