Как поменять background рабочего стола в телефоне
Добавлено: 28 янв 2012, 12:11
Некогда ранее задавал вопрос про сабж темы, на что ответили что нужно сделать отдельную тему в этом топике, но до того как я увидел ответ, уже в гугле нашел что как сделать, и вот решил поделиться со страждующими и написать небольшой мануал с дополнениями, а взрослые дядьки пусть посмотрят и может оптимизируют код.
В общем делаем main.xml с двумя кнопками
[/size]
Одну кнопку мы делаем для того чтобы поменять фон рабочего стола в самой программе, вторую делаем для того чтобы поменять фон рабочего стола в самом телефоне. Затем в папке /res мы создаем папку drawable, должно получиться /res/drawable. И в эту папку закидываем картинки которые будем использовать для рабочего стола
пишем MainActivity.java
[/size]
Ну вот и все, осталось только назначить соответствующие разрешения в androidmanifest.xml
В него пишем либо код
[/size]
Либо делаем руками во вкладке Permissions
Add -> Uses Permision -> в name пишем android.permission.SET_WALLPAPER (либо выбираем из списка)
Запускаем и смотрим что получилось

Возникло несколько вопросов по теме
1. Как сделать так чтобы по нажатию на кнопку btn_l ( смена background'a в самой программе) не исчезала кнопка которая меняет background. Я так понимаю что оно делает новые View и в нем уже картинку меняет чтоли
2. Как сделать так чтобы по нажатию на кнопку btn_g ( смена background'a в самом телефоне) оно пыталось подогнать размер как в стандартной галерее

Я так понимаю что надо использовать Intent Filter от галереи для масштабирования картинки или что то подобное. Если кто подскажет буду очень благодарен.
З.ы. Долго отсутствовал, теперь вернулся, буду нет-нет задавать вопросы, заранее спс за подсказки и за уроки.
В общем делаем main.xml с двумя кнопками
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:onClick="onClick" >
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/btn_l"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="BackGroun_Layer"
/>
<Button
android:id="@+id/btn_g"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="BackGround_Global"
/>
</RelativeLayout>
</LinearLayout>Одну кнопку мы делаем для того чтобы поменять фон рабочего стола в самой программе, вторую делаем для того чтобы поменять фон рабочего стола в самом телефоне. Затем в папке /res мы создаем папку drawable, должно получиться /res/drawable. И в эту папку закидываем картинки которые будем использовать для рабочего стола
пишем MainActivity.java
Код: Выделить всё
package app.fix.test_imagechange;
import java.io.IOException;
import android.app.Activity;
import android.app.WallpaperManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnClickListener {
// описываем кнопки
Button btn_l, btn_g;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Находим их
btn_l = (Button) findViewById(R.id.btn_l);
btn_g = (Button) findViewById(R.id.btn_g);
// Назначаем им действие
btn_l.setOnClickListener(this);
btn_g.setOnClickListener(this);
}
// затем следует сама процедура onClick
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
// Если нажата кнопка для смены background'a в layout'e
case R.id.btn_l:
// wallpaper1 это картинка которая хранится в /res/drawable
v.setBackgroundResource(R.drawable.wallpaper1);
break;
// Если нажата кнопка для смены background'a в самом телефоне
case R.id.btn_g:
// Здесь мы видимо используем стандартный android'овский wallpapermanager для работы с изображениями
// Здесь бы рассказать поточнее про него, кто что знает ))
WallpaperManager wm = WallpaperManager.getInstance(this);
try {
wm.setResource(R.drawable.wallpaper3);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}Ну вот и все, осталось только назначить соответствующие разрешения в androidmanifest.xml
В него пишем либо код
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.fix.test_imagechange"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>Либо делаем руками во вкладке Permissions
Add -> Uses Permision -> в name пишем android.permission.SET_WALLPAPER (либо выбираем из списка)
Запускаем и смотрим что получилось

Возникло несколько вопросов по теме
1. Как сделать так чтобы по нажатию на кнопку btn_l ( смена background'a в самой программе) не исчезала кнопка которая меняет background. Я так понимаю что оно делает новые View и в нем уже картинку меняет чтоли
2. Как сделать так чтобы по нажатию на кнопку btn_g ( смена background'a в самом телефоне) оно пыталось подогнать размер как в стандартной галерее

Я так понимаю что надо использовать Intent Filter от галереи для масштабирования картинки или что то подобное. Если кто подскажет буду очень благодарен.
З.ы. Долго отсутствовал, теперь вернулся, буду нет-нет задавать вопросы, заранее спс за подсказки и за уроки.