Я получаю фото на камеру (мобильную), и мне нужно это, чтобы установить обои, но у меня вылетает. Когда я использую от 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 ответа
Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.
Объявите объект 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" />
У меня были те же проблемы в моих приложениях для Android при установке текста текстового поля ... но я смог исправить это, имея ссылку на объект в методе OnCreate !!!!!! а затем, используя эту глобальную ссылку, я смог установить свойство TextArea text , вы должны выглядеть аналогичным решением ...
Вам необходимо использовать класс 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 и хотите использовать метод, который вы использовали, вам также необходимо установить разрешение.
Вы добавили разрешение обоев в свой манифест?
<uses-permission android:name="android.permission.SET_WALLPAPER" />
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.