diff --git a/app/build.gradle b/app/build.gradle
index 0a5d645c32b761c500add9b745eddacbd77691e6..4627d8e5e552595b0c643439112cb1fd01b11207 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -25,4 +25,6 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+
+ implementation 'com.github.dongzhong:VideoPlayer:v1.2'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0330d0df4d6cb9078392ef74e5ecfc30783afcda..fd195ba7059aeed2235330c54f77ae278a9a12e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
package="dongzhong.testforfloatingwindow">
+
+
\ No newline at end of file
diff --git a/app/src/main/java/dongzhong/testforfloatingwindow/FloatingVideoService.java b/app/src/main/java/dongzhong/testforfloatingwindow/FloatingVideoService.java
new file mode 100644
index 0000000000000000000000000000000000000000..72dca4cf161833e222e83ff0b8168616702fc0e6
--- /dev/null
+++ b/app/src/main/java/dongzhong/testforfloatingwindow/FloatingVideoService.java
@@ -0,0 +1,103 @@
+package dongzhong.testforfloatingwindow;
+
+import android.app.Service;
+import android.content.Intent;
+import android.graphics.PixelFormat;
+import android.os.Build;
+import android.os.IBinder;
+import android.provider.Settings;
+import android.support.annotation.Nullable;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+
+import dongzhong.videoplayer.VideoPlayer;
+
+/**
+ * Created by admin on 2018/5/30.
+ */
+
+public class FloatingVideoService extends Service {
+ public static boolean isStarted = false;
+
+ private WindowManager windowManager;
+ private WindowManager.LayoutParams layoutParams;
+
+ private View displayView;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ isStarted = true;
+ windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
+ layoutParams = new WindowManager.LayoutParams();
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
+ layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
+ } else {
+ layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
+ }
+ layoutParams.format = PixelFormat.RGBA_8888;
+ layoutParams.gravity = Gravity.LEFT | Gravity.TOP;
+ layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+ layoutParams.width = 800;
+ layoutParams.height = 450;
+ layoutParams.x = 300;
+ layoutParams.y = 300;
+ }
+
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ showFloatingWindow();
+ return super.onStartCommand(intent, flags, startId);
+ }
+
+ private void showFloatingWindow() {
+ if (Settings.canDrawOverlays(this)) {
+ LayoutInflater layoutInflater = LayoutInflater.from(this);
+ displayView = layoutInflater.inflate(R.layout.video_display, null);
+ VideoPlayer videoPlayer = displayView.findViewById(R.id.videoplayer_display);
+ videoPlayer.preset("https://raw.githubusercontent.com/dongzhong/ImageAndVideoStore/master/Bruno%20Mars%20-%20Treasure.mp4",
+ "Treasure - Bruno Mars", true);
+ windowManager.addView(displayView, layoutParams);
+
+ displayView.setOnTouchListener(new FloatingOnTouchListener());
+ }
+ }
+
+ private class FloatingOnTouchListener implements View.OnTouchListener {
+ private int x;
+ private int y;
+
+ @Override
+ public boolean onTouch(View view, MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ x = (int) event.getRawX();
+ y = (int) event.getRawY();
+ break;
+ case MotionEvent.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;
+ }
+ }
+}
diff --git a/app/src/main/java/dongzhong/testforfloatingwindow/MainActivity.java b/app/src/main/java/dongzhong/testforfloatingwindow/MainActivity.java
index 1b1c176585af65a1a4115f611ed1fcc78c3ecf36..8d753381094cdbe5fd5c7ec93923134befc12d85 100644
--- a/app/src/main/java/dongzhong/testforfloatingwindow/MainActivity.java
+++ b/app/src/main/java/dongzhong/testforfloatingwindow/MainActivity.java
@@ -32,6 +32,13 @@ public class MainActivity extends AppCompatActivity {
Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show();
startService(new Intent(MainActivity.this, FloatingImageDisplayService.class));
}
+ } else if (requestCode == 2) {
+ if (!Settings.canDrawOverlays(this)) {
+ Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();
+ } else {
+ Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show();
+ startService(new Intent(MainActivity.this, FloatingVideoService.class));
+ }
}
}
@@ -58,4 +65,16 @@ public class MainActivity extends AppCompatActivity {
startService(new Intent(MainActivity.this, FloatingImageDisplayService.class));
}
}
+
+ public void startFloatingVideoService(View view) {
+ if (FloatingVideoService.isStarted) {
+ return;
+ }
+ if (!Settings.canDrawOverlays(this)) {
+ Toast.makeText(this, "当前无权限,请授权", Toast.LENGTH_SHORT);
+ startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), 2);
+ } else {
+ startService(new Intent(MainActivity.this, FloatingVideoService.class));
+ }
+ }
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 8d6ea01643c65e30928b210a14cc8f9a949b8a8d..39e120d577c03accd0b2ed60be55e1577476c0ce 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -17,4 +17,10 @@
android:text="start floating image display"
android:onClick="startFloatingImageDisplayService"/>
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/video_display.xml b/app/src/main/res/layout/video_display.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e4fc57c8165363da678ffec5c749550be98c4eda
--- /dev/null
+++ b/app/src/main/res/layout/video_display.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index e6b32bc7884bb98a5024981d37fec787514b56c8..623969e6380f404a9ee6951dbe9a15320aff1dbb 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,6 +19,7 @@ allprojects {
repositories {
google()
jcenter()
+ maven { url 'https://jitpack.io' }
}
}