在Android上工作我正在創建一個SDK,創建一個服務以在客戶端應用程序上顯示覆蓋圖。 我希望能夠使用擴展Service類的類的上下文創建ImageView和其他小部件。 這是我正在做的減少版本。如何使用服務的上下文創建ImageView
public class MyService extends Service {
private WindowManager windowManager;
private ImageView myImage;
@Override
public void onCreate(){
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
return START_NOT_STICKY;
}
public void startService (Context ctx) {
context = ctx;
Intent intent = new Intent(ctx, MyService.class);
ctx.startService(intent);
// have also tried new Intent(this, MyService.class);
// startService(intent);
}
public void displayMyImage() {
if (chatHead == null) {
chatHead = new ImageView(this);// explodes here due to null
}
chatHead.setImageResource(R.drawable.myimage);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
params.x = 10;
params.y = 100;
windowManager.addView(chatHead, params);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
if (chatHead != null) windowManager.removeView(chatHead);
}
我上線chatHead = new ImageView(this)
我想這是從這篇文章http://www.piwai.info/chatheads-basics/他們使用它來創建服務中的形象圖,其中的原因得到java.lang.NullPointerException
。我怎樣才能讓它使用服務的上下文,而不需要我傳遞客戶端/主機應用程序的上下文?
編輯:剛剛在完整的錯誤把從日誌
java.lang.NullPointerException
at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
at android.view.View.<init>(View.java:3438)
at android.widget.ImageView.<init>(ImageView.java:114)
您是否嘗試使用'getApplicationContext()'而不是'this'? – Apoorv 2014-09-13 07:44:03
剛剛嘗試過。相同的空指針異常java.lang.NullPointerException at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) – glogic 2014-09-13 07:51:49
@glogic可能是你從錯誤的地方調用了displayMyImage。我用你的代碼,並從onCreate和ImageView調用displayMyImage成功添加到屏幕上。 – Bracadabra 2014-09-13 08:19:33