我想弄个东西,大体就是每天开启模拟器的时候都能更换不同的桌面背景!请问这个怎么实现!大家给点意见,有源码最好了!

解决方案 »

  1.   

    JAVA代码:public class MainActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //获取文件夹路径
            String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/image";
            //获取该目录下所有文件
            File [] files = new File(path).listFiles();
            //随机出图片文件下标
            int index = (int)(Math.random() * files.length);
            //根据下标取出图片文件并设置成为模拟器背景
            Bitmap bm = BitmapFactory.decodeFile(files[index].getAbsolutePath());
            
            try {
    setWallpaper(bm);
    } 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="com.archermind.activity"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" 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>
        <uses-sdk android:minSdkVersion="7" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    </manifest> 
    前提是要先把需要用的图片文件PUSH到sd卡中才可以访问,顺便借问一下大神,android不能直接访问本地磁盘中的文件么?我下面的代码files数组始终是null,获取不到路径下的文件public File [] getAllFiles(){

    String path = "D:/image";
            //获取文件夹目录
            File directory = new File(path);
            //获取目录下的所有图片文件数组
            File [] files = directory.listFiles();
            
            return files;
    }
      

  2.   

    你这样做,还是要人为的去运行程序!我要的效果是自动更新桌面!程序只要运行一次,以后就可以自动的更新了!这个好像要用到widget,但我还是不知道怎样下手!至于你说的,貌似不能直接访问本地磁盘!
      

  3.   

    你说的自动更新是什么时候更新?多久更新一次?要么就用TimerTask吧,定时更新
      

  4.   


    注册开机广播,开机时随机找张图片或用SharedPreferences记录上次的图片来算当前要显示的图片,显示就可以了。
    public class RootReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context arg0, Intent arg1) {
    // TODO Auto-generated method stub
    System.out.println("onReceive BroadcastReceiver");
    /*SharedPreferences内记录上次显示图片的索引或随机产生一个*/

    /*设置背景图片*/
    Bitmap bitMap = BitmapFactory.decodeResource(arg0.getResources(),R.drawable.pic1);
    try {
    arg0.getApplicationContext().setWallpaper(bitMap);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.exit(0);
    }
    }注册广播和允许权限<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="root.start"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".RootActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        <receiver android:name="RootReceiver" >
          <intent-filter> 
            <action   android:name="android.intent.action.BOOT_COMPLETED" /> 
            <category android:name="android.intent.category.HOME" /> 
          </intent-filter>
        </receiver> 
        </application>
        <uses-permission  android:name="android.permission.SET_WALLPAPER"/>
    </manifest>
      

  5.   

    有没设设置桌面背景的权限?
     <uses-permission  android:name="android.permission.SET_WALLPAPER"/>
      

  6.   

    设置了哦!你这里有一个RootActivity,里面有什么内容不?
      

  7.   

    activity里没什么就是adt生成的hello world,主要是安装apk,运行一次就可以了。也可以加几个按钮用软件注册和注销广播接收。
    package root.start;
    import android.app.Activity;
    import android.os.Bundle;
    public class RootActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    // Bitmap bitMap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
    // try {
    // getApplicationContext().setWallpaper(bitMap);
    // } catch (IOException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    }         
        }