나는 똑같은 문제가 있었고 여기서 어떻게 해결했는지를 설명했다. 처음에 내가 안드로이드의 기본 PopupWindow
클래스를 사용하려했지만, 나중에 나는이 방법처럼 WindowManager
을 사용하기로 결정 :
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);
}
}
}
그리고 당신은 의도를 통해이 서비스 클래스를 호출 할 수 있습니다
intent = new Intent(mContext, MyService.class);
if (intent != null) {
getContext().startService(intent);
}
또한, 매니페스트 파일에 권한을 설정합니다, 나는 안드로이드의 LoadAverageService.java
클래스를 참조
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
nd 나는 마지막으로 서비스에서 팝업 창을 만들었습니다! 이것은 매우 간단한 예이므로 복잡한 함수를 개발하려면 더 많은 것을 추가해야 할 수도 있습니다. 희망이 당신과 다른 사람들을 도울 것입니다.
감사합니다. 조금 더 구체적 일 수 있습니까? 내 목표는 활동을 거치지 않고 서비스에서 팝업 창을 시작하는 것입니다. 특히, 나는 팝업 창을 시작하고 사용자가 일반적으로 전화를 사용함에 따라 다른 모든 창 위에 앉아 싶습니다. 이 작업을 수행 할 수 있습니까? – emi
어쨌든 활동을 시작해야한다고 생각합니다. Theme.Dialog 테마를 지정하면 현재 사용자 화면 상단에 대화 상자처럼 보입니다. 방금 [여기] dsicussion (http://stackoverflow.com/questions/2394477/make-android-activity-looks-like-dialog)을 발견했습니다. – slkorolev
당신은 서비스에서 활동 X를 시작하고 활동 X가 대화 상자를 시작하는 것을 의미합니까? – emi