MainActivity.java文件
packagecom.example.performance;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Build;importandroid.os.Bundle;importandroid.provider.Settings;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;public class MainActivity extendsActivity {
@Overrideprotected voidonCreate(Bundle savedInstanceState)
{if (Build.VERSION.SDK_INT >= 23) {if (Settings.canDrawOverlays(MainActivity.this)) {//Intent intent = new Intent(MainActivity.this, FloatingService.class);
Toast.makeText(MainActivity.this,"已开启Toucher",Toast.LENGTH_SHORT).show();//startService(intent);//finish();
} else{//若没有权限,提示获取.
Intent intent = newIntent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
Toast.makeText(MainActivity.this,"需要取得权限以使用悬浮窗",Toast.LENGTH_SHORT).show();
startActivity(intent);
}
}else{//SDK在23以下,不用管.//Intent intent = new Intent(MainActivity.this, FloatingService.class);//startService(intent);//finish();
}
setContentView(R.layout.activity_main);
Button startFloatWindow=(Button) findViewById(R.id.btn_floatWindows);
startFloatWindow.setOnClickListener(newOnClickListener() {
@Overridepublic voidonClick(View v) {
Intent intent=new Intent(MainActivity.this, FloatingService.class);
startService(intent);
finish();
}
});super.onCreate(savedInstanceState);
}
}
FloatingService.java 文件
packagecom.example.performance;importandroid.annotation.SuppressLint;importandroid.app.Service;importandroid.content.Intent;importandroid.graphics.Color;importandroid.graphics.PixelFormat;importandroid.os.Build;importandroid.os.IBinder;importandroid.provider.Settings;importandroid.view.MotionEvent;importandroid.view.View;importandroid.view.WindowManager;importandroid.widget.Button;
@SuppressLint({"ShowToast", "ClickableViewAccessibility"})public class FloatingService extendsService {
@OverridepublicIBinder onBind(Intent intent) {//TODO Auto-generated method stub
return null;
}
@Overridepublic int onStartCommand(Intent intent, int flags, intstartId) {
showFloatingWindow();return super.onStartCommand(intent, flags, startId);
}private voidshowFloatingWindow() {if (Settings.canDrawOverlays(this)) {//获取WindowManager服务
final WindowManager windowManager =(WindowManager) getSystemService(WINDOW_SERVICE);//新建悬浮窗控件
final Button button = newButton(getApplicationContext());
button.setText("Floating Window");
button.setBackgroundColor(Color.BLUE);//设置LayoutParam
final WindowManager.LayoutParams layoutParams = newWindowManager.LayoutParams();if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.O) {
layoutParams.type=WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}else{
layoutParams.type=WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}
layoutParams.format=PixelFormat.RGBA_8888;
layoutParams.width= 500;
layoutParams.height= 100;
layoutParams.x= 100;
layoutParams.y= 300;
layoutParams.flags= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;//将悬浮窗控件添加到WindowManager
windowManager.addView(button, layoutParams);
button.setOnTouchListener(newView.OnTouchListener(){private intx;private inty;
@Overridepublic booleanonTouch(View view, MotionEvent event) {switch(event.getAction()) {caseMotionEvent.ACTION_DOWN:
x= (int) event.getRawX();
y= (int) event.getRawY();break;caseMotionEvent.ACTION_MOVE:int nowX = (int) event.getRawX();int nowY = (int) event.getRawY();int movedX = nowX -x;int movedY = nowY -y;
x=nowX;
y=nowY;
layoutParams.x= layoutParams.x +movedX;
layoutParams.y= layoutParams.y +movedY;//更新悬浮窗控件布局
windowManager.updateViewLayout(view, layoutParams);break;default:break;
}return false;
}
});
}
}
}
View Code
activity_main.xml 文件
package="com.example.performance"
android:versionCode="1"
android:versionName="1.0" >
android:minSdkVersion="26"
android:targetSdkVersion="26" />
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name=".MainActivity"
android:label="@string/app_name" >
AndroidManifest.xml 文件
package="com.example.performance"
android:versionCode="1"
android:versionName="1.0" >
android:minSdkVersion="26"
android:targetSdkVersion="26" />
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name=".MainActivity"
android:label="@string/app_name" >