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);
}
}
}
}
感謝任何能提供幫助的人。