2012-06-14 5 views
0

나는 주로 다음과 같이 작업하는 안드로이드에서의 첫 라이브 배경 작업을 시작했습니다 : http://www.vogella.com/articles/AndroidLiveWallpaper/article.html. 문제는 바탕 화면을 선택할 수있는 화면에 배경 무늬가 나타나지 않는다는 것입니다.설치되어 있지만, 안드로이드 라이브 벽지가 나타나지 않습니다.

일식에서 바탕 화면을 시작했지만 제거한 바탕 화면을 다시 설치했지만 내 스마트 폰이나 에뮬레이터에서 작동하지 않습니다.

매니페스트 :

<?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 기록 된 소문자! 나는 그것이 문제라고 생각한다. :)

관련 문제