当我使用方法setWallpaper android时崩溃?

时间:2014-11-04 12:28:42

标签: android

我正在用相机(手机)拍照,然后我需要将它设置为壁纸但让我崩溃。 当我使用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

4 个答案:

答案 0 :(得分:1)

请尝试这种方式,希望这有助于您解决问题。

在类级别声明WallpaperManager对象:

private WallpaperManager wallpaperManager;

在initialize()中初始化WallpaperManager对象:

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 :(得分:0)

我在设置textarea文本时在Android应用程序中遇到了同样的问题.....但我能够通过 OnCreate 方法中的对象引用来修复它!!!!!!然后通过使用该全局引用,我能够设置 TextArea文本属性,你必须看起来类似的解决方案......

答案 2 :(得分:0)

如果您开发更高的API级别5,则需要使用WallpaperManager类:

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

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

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

   }

要使用管理器,您需要在清单中设置权限SET_WALLPAPER。此外,如果您在API级别5下开发并且您想要使用您使用的方法,则还必须设置权限。

答案 3 :(得分:0)

您是否已将壁纸权限添加到清单?

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