私は同じ問題を抱えていましたが、ここでどのように解決したのですか?最初の時点で 私はAndroidのネイティブ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);
}
また、マニフェストファイルにアクセス権を設定します、私はAndroidの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