2012-06-14 27 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寫小寫!我認爲這是問題所在。 :)