Я получаю фото на камеру (мобильную), и мне нужно это, чтобы установить обои, но у меня вылетает. Когда я использую от setWallpaper(), он говорит мне The method setWallpaper(Bitmap) from the type Context is deprecated. Вот мой код:

public class Camera extends Activity implements View.OnClickListener {
    ImageButton ib;
    Button b;
    ImageView iv;
    Intent i;
    final static int cameraData = 0;
    Bitmap bmp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.photo);
        initialize();
    }

    private void initialize() {
        iv = (ImageView) findViewById(R.id.IVReturnedPic);
        ib = (ImageButton) findViewById(R.id.IBTakePic);
        b = (Button) findViewById(R.id.btnSetWall);
        b.setOnClickListener(this);
        ib.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnSetWall:
            try {
                getApplicationContext().setWallpaper(bmp);
            } catch (IOException e) {
                e.printStackTrace();
            }
            break;
        case R.id.IBTakePic:
            i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(i, cameraData);
            break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            bmp = (Bitmap) extras.get("data");
            iv.setImageBitmap(bmp);
        }
    }
}

Отсюда вылетает setWallpaper():

getApplicationContext().setWallpaper(bmp);

Примечание: в этом коде я использую View.OnClickListener.

0
A.A 4 Ноя 2014 в 15:28

4 ответа

Лучший ответ

Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.

Объявите объект WallpaperManager на уровне класса:

private WallpaperManager wallpaperManager;

Инициализировать объект WallpaperManager в initialize ():

private void initialize() {
  wallpaperManager = WallpaperManager.getInstance(this);
}

Установите растровое изображение в объект wallpaperManager.

case R.id.btnSetWall:
   try {
       if(bmp!=null){
           wallpaperManager.setBitmap(bmp);
       }else{ 
           // write your bitmap null handle code here.
       }
   } catch (IOException e) {
     Log.e(TAG, "Cannot set image as wallpaper", e);
   }
   break;

Добавьте это разрешение в AndroidManifest.xml:

<uses-permission android:name="android.permission.SET_WALLPAPER" />
1
Haresh Chhelana 4 Ноя 2014 в 12:56

У меня были те же проблемы в моих приложениях для Android при установке текста текстового поля ... но я смог исправить это, имея ссылку на объект в методе OnCreate !!!!!! а затем, используя эту глобальную ссылку, я смог установить свойство TextArea text , вы должны выглядеть аналогичным решением ...

0
Awais Ahmad Waraich 4 Ноя 2014 в 12:35

Вам необходимо использовать класс WallpaperManager, если вы разрабатываете API более высокого уровня 5:

WallpaperManager mManager = WallpaperManager.getInstance(getApplicationContext());

  try {
      mManager.setResource(R.drawable.yourDrawable);
  } catch (IOException e) {

   //warning for the user
e.printStackTrace();

   }

А чтобы пользоваться менеджером, нужно в манифесте установить права доступа SET_WALLPAPER. Кроме того, если вы разрабатываете уровень API 5 и хотите использовать метод, который вы использовали, вам также необходимо установить разрешение.

0
Opiatefuchs 4 Ноя 2014 в 12:40

Вы добавили разрешение обоев в свой манифест?

 <uses-permission android:name="android.permission.SET_WALLPAPER" />
0
Rhynoboy2009 4 Ноя 2014 в 12:53