一个Android平台下的仿微信视频聊天悬浮窗

21

一个Android平台下的仿微信视频聊天悬浮窗

关闭悬浮窗。接下来我们就来分别实现这二个按钮的功能。首先是创建悬浮窗的功能:

1. 权限配置在AndroidManifest.xml文件中添加悬浮窗权限配置:

```xml

```

2. 悬浮窗Service创建一个悬浮窗Service,用于管理视频通话悬浮窗的显示和隐藏。

```javapublic class FloatWindowService extends Service {

private WindowManager mWindowManager;

private WindowManager.LayoutParams mLayoutParams;

private View mFloatView;

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

showFloatWindow();

return super.onStartCommand(intent, flags, startId);

}

@Override public IBinder onBind(Intent intent) {

return null;

}

private void showFloatWindow() {

mFloatView = LayoutInflater.from(this).inflate(R.layout.layout_float_window, null);

mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

mLayoutParams = new WindowManager.LayoutParams(

WindowManager.LayoutParams.WRAP_CONTENT,

WindowManager.LayoutParams.WRAP_CONTENT,

Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,

WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,

PixelFormat.TRANSLUCENT);

mLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;

mLayoutParams.x =0;

mLayoutParams.y =0;

mWindowManager.addView(mFloatView, mLayoutParams);

}

@Override public void onDestroy() {

super.onDestroy();

if (mWindowManager != null && mFloatView != null) {

mWindowManager.removeView(mFloatView);

}

}

}

```

在上述代码中,我们首先在清单文件中添加了悬浮窗权限配置,然后创建了一个FloatWindowService类,该类继承自Service,用于管理悬浮窗的显示和隐藏。在showFloatWindow()方法中,我们通过WindowManager来添加一个悬浮窗,并设置悬浮窗的样式和位置。

3. 悬浮窗布局在res/layout目录下创建layout_float_window.xml文件,用于定义视频通话悬浮窗的布局:

```xml

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/bg_float_window"

android:padding="16dp"

android:layout_gravity="center">

android:layout_height="48dp"

android:src="@drawable/ic_video_call" />

android:layout_height="wrap_content"

android:text="视频通话"

android:textColor="FFFFFF"

android:textSize="14sp"

android:layout_marginTop="8dp"/>

```

4. 悬浮窗启动在MainActivity中启动FloatWindowService,在用户点击创建悬浮窗按钮时启动悬浮窗Service:

```javapublic class MainActivity extends AppCompatActivity {

private static final int REQUEST_CODE =101;

@Override protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {

Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,

Uri.parse("package:" + getPackageName()));

startActivityForResult(intent, REQUEST_CODE);

}

Button btnCreateFloatWindow = findViewById(R.id.btn_create_float_window);

Button btnCloseFloatWindow = findViewById(R.id.btn_close_float_window);

btnCreateFloatWindow.setOnClickListener(new View.OnClickListener() {

@Override public void onClick(View v) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Settings.canDrawOverlays(MainActivity.this)) {

startService(new Intent(MainActivity.this, FloatWindowService.class));

}

}

});

btnCloseFloatWindow.setOnClickListener(new View.OnClickListener() {

@Override public void onClick(View v) {

stopService(new Intent(MainActivity.this, FloatWindowService.class));

}

});

}

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == REQUEST_CODE) {

//检查悬浮窗权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Settings.canDrawOverlays(this)) {

startService(new Intent(this, FloatWindowService.class));

}

}

}

}

```

在上述代码中,我们在MainActivity中实现了创建悬浮窗和关闭悬浮窗的按钮点击事件,当用户点击创建悬浮窗按钮时,首先检查悬浮窗权限,然后启动FloatWindowService,显示视频通话悬浮窗;关闭悬浮窗按钮则停止FloatWindowService,隐藏视频通话悬浮窗。

通过以上代码,我们实现了仿微信的视频通话悬浮窗效果,用户可以通过点击按钮来创建悬浮窗并进行视频通话,在不需要时也可以关闭悬浮窗。当然,以上只是一个简单的实现示例,实际开发中可能需要根据具体需求来进行定制和扩展。

希望以上信息对你有所帮助,如有疑问,还请多多指教。

聊天视频

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 小程序关联微信视频号

下一篇 微信视频号推流直播使用测评