有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在其他应用程序上创建按钮并使用OnClickListener的java服务

我正在做一个项目,我的目标是创建一个显示在其他应用程序顶部的按钮,当我们点击它时,会改变屏幕上的活动,为此我进行了研究,发现我必须使用“服务”

我设法创建了一个位于其他应用程序之上的imageView,但我无法与它交互并使用OnClickListener

如果你有任何想法,请告诉我

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if(Settings.canDrawOverlays(this)){
    } else {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Activity context = this;
        context.startActivity(intent);
    }

    Button start_button = findViewById(R.id.start);
    start_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent startBubble = new Intent(MainActivity.this, BubbleService.class);
            startService(startBubble);

        }
    });
}

以下是服务:

public class BubbleService extends Service {

private WindowManager windowManager;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    ImageView mFloatingImage = new ImageView(this);
    mFloatingImage.setImageResource(R.mipmap.ic_launcher_round);
    mFloatingImage.setClickable(true);

    int LAYOUT_FLAG;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    } else {
        LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
    }

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(150,
            150,
            LAYOUT_FLAG,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.x = 0;
    params.y = 0;
    params.gravity = Gravity.END | Gravity.CENTER;

    windowManager.addView(mFloatingImage, params);

    mFloatingImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println("clicked");
        }
    });
    return START_STICKY;
}

}


共 (1) 个答案

  1. # 1 楼答案

    如果您使用下面的标志,它将不起作用:

    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE

    尝试删除该标志,它应该会起作用