나는 주로 다음과 같이 작업하는 안드로이드에서의 첫 라이브 배경 작업을 시작했습니다 : 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);
}
}
}
}
도움을 줄 수있는 사람에게 감사드립니다.