我正在尝试使用WallpaperManager类的getCropAndSetWallpaperIntent方法,但是面对uri需要它的问题。首先,我试图从可绘制资源中获取Uri,但我得出结论认为这是不可能的,并决定将文件写入内部存储并获取其Uri。现在它给出了一个错误,即uri类型必须是内容。我该如何解决这个错误?也许将文件写入内存是完全错误的,还有其他解决方案吗? 这是我的代码:
public void onclick(View v){
switch (v.getId())
{
case R.id.set:
// try{
//R.drawable.file1
File file =new File(this.getFilesDir(),getResources().getResourceName(R.drawable.file1));
file.setWritable(true);
if (!file.exists())
{
Bitmap bm= BitmapFactory.decodeResource(getResources(),R.drawable.file1);
try {
FileOutputStream outputStream=new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.JPEG,100,outputStream);
outputStream.flush();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Uri uri=Uri.fromFile(file);
Intent i=wmanager.getCropAndSetWallpaperIntent(uri);
startActivity(i);
break;
case R.id.clear:
try{
wmanager.clear();
}
catch (IOException ioex){
ioex.printStackTrace();
}
}
}
答案 0 :(得分:1)
我已经看到了同样的问题,通过以下方法修复并且工作正常。
@TargetApi(Build.VERSION_CODES.KITKAT) private void setWallpaperKitkat(File file) {
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(WallpaperManager.ACTION_CROP_AND_SET_WALLPAPER);
String mime = "image/*";
intent.setDataAndType(uri, mime);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
//handle error
}
}