在其他应用程序上创建按钮并使用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 楼答案
如果您使用下面的标志,它将不起作用:
尝试删除该标志,它应该会起作用