Tuve el mismo problema y aquí si lo resolví. A primera vez que he tratado de usar la clase nativa PopupWindow
de Android, pero luego decidí usar WindowManager
como esta manera:
public class MyService extends Service {
private View mView;
private WindowManager.LayoutParams mParams;
private WindowManager mWindowManager;
@Override
public void onCreate() {
super.onCreate();
mView = new MyLoadView(this);
mParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, 150, 10, 10,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
mParams.gravity = Gravity.CENTER;
mParams.setTitle("Window test");
mWindowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mView, mParams);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
((WindowManager)getSystemService(WINDOW_SERVICE)).removeView(mView);
mView = null;
}
public class MyLoadView extends View {
private Paint mPaint;
public MyLoadView(Context context) {
super(context);
mPaint = new Paint();
mPaint.setTextSize(50);
mPaint.setARGB(200, 200, 200, 200);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText("test test test", 0, 100, mPaint);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
y se puede llamar a esta clase de servicio a través de la intención:
intent = new Intent(mContext, MyService.class);
if (intent != null) {
getContext().startService(intent);
}
además, establecer el permiso en el archivo de manifiesto:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
hice referencia a la clase de Android LoadAverageService.java
, una ¡Finalmente, creé una ventana emergente del servicio! Este es un ejemplo muy simple, por lo que puede necesitar agregar algo más si desea desarrollar funciones complejas. Espero que esto te ayude a ti y a los demás.
gracias. ¿Podrías ser un poco más específico? Mi objetivo es abrir la ventana emergente del servicio sin pasar por una actividad. En particular, quiero iniciar la ventana emergente y hacer que se asiente en la parte superior de todas las otras ventanas ya que el usuario normalmente usa el teléfono. Se puede hacer esto? – emi
Creo que tienes que comenzar una actividad de todos modos. Puede asignarle el tema Theme.Dialog para que parezca un cuadro de diálogo en la parte superior de la pantalla del usuario actual. Acabo de encontrar una sugerencia [aquí] (http://stackoverflow.com/questions/2394477/make-android-activity-looks-like-dialog). – slkorolev
te refieres a iniciar la actividad X desde el servicio y tener actividad X ¿iniciar el diálogo? – emi