2012-06-14 26 views
0

我开始了我的第一个活的壁纸工作在Android上主要有这方面的工作: http://www.vogella.com/articles/AndroidLiveWallpaper/article.html。问题在于,壁纸不显示在您可以选择壁纸的屏幕上。Android动态壁纸显示不出来,但它是安装

我开始墙纸出日食,卸载重新安装导出的墙纸,但它也不适用于智能手机,也没有在模拟器上。

的清单:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="de.zdev.wallpaper.cpubeat" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="10" /> 
<uses-feature android:name="android.software.live_wallpaper" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 

<service 
    android:name="de.zdev.wallpaper.CPUBeatService" 
    android:label="@string/app_name" 
    android:permission="android.permission.BIND_WALLPAPER" > 

    <intent-filter> 
     <action android:name="android.service.wallpaper.WallpaperService" /> 
    </intent-filter> 

    <meta-data 
     android:name="android.service.wallpaper" 
     android:resource="@xml/wallpaper" /> 

</service> 

</application> 

的 “wallpaper.xml”(我不认为这个问题是在这里):

<?xml version="1.0" encoding="utf-8"?> 
<Wallpaper 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:thumbnail="@drawable/ic_launcher" 
android:description="@string/description" /> 

最后我“CPUBeatService.java “:

package de.zdev.wallpaper.cpubeat; 

import android.graphics.Canvas; 
import android.graphics.Color; 
import android.os.Handler; 
import android.service.wallpaper.WallpaperService; 
import android.service.wallpaper.WallpaperService.Engine; 
import android.view.SurfaceHolder; 

public class CPUBeatService extends WallpaperService { 
    @Override 
    public Engine onCreateEngine(){ 
     return new CPUBeatEngine(); 
    } 

    private class CPUBeatEngine extends Engine{ 

     private final Handler handler = new Handler(); 
     private boolean visible = true; 
     private int width, height; 
     private final Runnable drawRunnable = new Runnable(){ 
      public void run(){ 
       doDraw(); 
      } 
     }; 

     public CPUBeatEngine(){ 
      handler.post(drawRunnable); 
     } 

     private void draw(Canvas c){ 
      c.drawColor(Color.GREEN); 
     } 

     @Override 
     public void onVisibilityChanged(boolean v){ 
      visible = v; 
      if(visible) handler.post(drawRunnable); 
      else handler.removeCallbacks(drawRunnable); 
     } 

     @Override 
     public void onSurfaceDestroyed(SurfaceHolder holder){ 
      super.onSurfaceDestroyed(holder); 
      visible = false; 
      handler.removeCallbacks(drawRunnable); 
     } 

     @Override 
     public void onSurfaceChanged(SurfaceHolder holder, int format, int w, int h){ 
      super.onSurfaceChanged(holder, format, w, h); 
      width = w; 
      height = h; 
     } 

     private void doDraw(){ 
      SurfaceHolder holder = getSurfaceHolder(); 
      Canvas c = null; 
      try { 
       c = holder.lockCanvas(); 
       if (c != null) { 
        //do the real drawing now 
        draw(c); 
       } 
      } finally { 
       if (c != null) 
        holder.unlockCanvasAndPost(c); 
      } 
      handler.removeCallbacks(drawRunnable); 
      if (visible) { 
       handler.postDelayed(drawRunnable, 5000); 
      } 
     } 

    } 
} 

感谢任何能提供帮助的人。

回答

1

好了,几个月后,我决定在此重新工作。我发现了错误......至少我认为是这样。 的Wallpaper.xml是不正确的,这是正确的:

<?xml version="1.0" encoding="utf-8"?> 
<wallpaper 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:thumbnail="@drawable/ic_launcher" 
android:description="@string/description" /> 

注意:<wallpaper写小写!我认为这是问题所在。 :)