i have just started learning live wallpapers and i made this little thing.
the thing is my app compiles with out any problems.
as i open it in the phone it shows the wallpaper in the preview but when i click "set as wallpaper" it somehow crashes, and returns the front screen, and my wallpaper turns black, but it doesn't run it.
my guess is the problem is some where along the onDestory() ..
public class Strips extends WallpaperService {
private StripsEngine engine;
@Override
public void onCreate() {
super.onCreate();
engine = new StripsEngine();
engine.resume();
}
@Override
public void onDestroy() {
super.onDestroy();
engine.pause();
}
@Override
public Engine onCreateEngine() {
return engine;
}
class StripsEngine extends Engine implements Runnable {
private Thread t = null;
private SurfaceHolder holder;
private boolean clearToRun = false;
private Paint paint = new Paint();
private Paint paint2 = new Paint();
private int frame;
private float endX,endY;
private int height, width;
private Canvas c;
StripsEngine() {
holder = getSurfaceHolder();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(30);
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStyle(Paint.Style.STROKE);
paint2 = paint;
paint2.setColor(Color.BLACK);
paint2.setStrokeWidth(40);
frame = 0;
}
void drawStrips() {
}
public void run() {
// TODO Auto-generated method stub
while (clearToRun) {
if (!holder.getSurface().isValid()) {
continue;
}
height = 800;
width = 480;
endX = (frame) % (width + 10);
endY = (frame / 3) % (height + 10);
if (endX == 0)
paint.setARGB(255,(int)(Math.random()*255), (int)(Math.random()*255),(int)(Math.random()*255));
if (endY ==0)
paint.setARGB(255,(int)(Math.random()*255), (int)(Math.random()*255),(int)(Math.random()*255));
c = holder.lockCanvas();
c.drawLine(endX-30, endY-10, endX , endY,paint);
c.drawLine(endX-30, endY-10, endX , endY,paint);
holder.unlockCanvasAndPost(c);
frame = frame +2;
}
}
public void pause() {
clearToRun = false;
while (true) {
try {
t.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
t = null;
}
public void resume() {
clearToRun = true;
t = new Thread(this);
t.start();
}
}
}
07-06 17:14:43.869: E/Surface(478): error dequeuing a buffer (Unknown error: -19) 07-06 17:14:43.869: E/Surface(478): dequeueBuffer failed (No such device) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): Exception locking surface 07-06 17:14:43.869: E/BaseSurfaceHolder(478): java.lang.IllegalArgumentException 07-06 17:14:43.869: E/BaseSurfaceHolder(478): at android.view.Surface.lockCanvasNative(Native Method) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): at android.view.Surface.lockCanvas(Surface.java:288) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): at com.android.internal.view.BaseSurfaceHolder.internalLockCanvas(BaseSurfaceHolder.java:132) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): at com.android.internal.view.BaseSurfaceHolder.lockCanvas(BaseSurfaceHolder.java:112) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): at com.mendel.strips.Strips$StripsEngine.run(Strips.java:81) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): at java.lang.Thread.run(Thread.java:1096) 07-06 17:14:43.972: W/dalvikvm(478): threadid=15: thread exiting with uncaught exception (group=0x4001b188) 07-06 17:14:43.979: E/AndroidRuntime(478): Uncaught handler: thread Thread-8 exiting due to uncaught exception 07-06 17:14:43.990: E/AndroidRuntime(478): java.lang.NullPointerException 07-06 17:14:43.990: E/AndroidRuntime(478): at com.mendel.strips.Strips$StripsEngine.run(Strips.java:82) 07-06 17:14:43.990: E/AndroidRuntime(478): at java.lang.Thread.run(Thread.java:1096) 07-06 17:14:43.999: I/dalvikvm(478): threadid=7: reacting to signal 3 07-06 17:14:43.999: E/dalvikvm(478): Unable to open stack trace file '/data/anr/traces.txt': Permission denied