如何在 Android 中实现画中画 (PIP) 功能?


Android 上的 PiP 功能允许用户通过在使用其他应用程序的同时观看视频或参与其他内容来轻松地进行多任务处理。此创新功能确保您始终可以控制您的设备,即使您正在享受媒体娱乐。包含视频或内容的小型浮动窗口支持这些活动,并通过使任务更容易同时管理来增强用户体验。

要向 Android 应用程序添加画中画功能,开发人员需要利用 Android 框架中提供的特定 API 和功能。PiP 通过在应用程序中提供无缝的多任务处理来增强用户体验。本综合指南将逐步介绍在 Android 应用程序中轻松实现 PiP 所需的步骤和技术。

画中画 (PIP)

PiP,也称为画中画,是一个方便的功能,允许用户在设备上进行多任务处理。他们可以在访问其他应用程序的同时,在一个单独的小窗口或叠加层中查看和交互媒体内容。

用户现在可以使用 PiP 功能更有效地进行多任务处理,这允许他们在一个紧凑且可调整大小的窗口中继续观看视频——无论是电影还是视频通话,该窗口始终位于其他应用程序窗口的顶部。

PiP 窗口提供了充足的自定义空间,允许用户在屏幕上移动,根据自己的方便调整窗口大小,甚至与之交互。这导致在设备上执行其他任务时能够无缝且不间断地使用媒体内容。

方法

使用 Java 在 Android 应用程序中实现画中画 (PiP) 可以通过多种方式完成。本文介绍了三种常用的实现 PiP 功能的方法。

  • 在媒体播放器中使用画中画模式

  • 使用自定义视频播放器实现画中画模式

  • 使用 WebView 实现画中画模式

在媒体播放器中使用画中画模式

此方法涉及创建 MediaSessionCompat 对象并使用 MediaPlayer 处理媒体播放。您设置媒体控件和操作,注册 MediaSessionCompat.Callback 来处理 PiP 回调,并使用 setPictureInPictureParams() 方法进入画中画模式。

算法

  • 创建一个 MediaSessionCompat 对象并使用 MediaPlayer 或其他媒体播放器处理媒体播放。

  • 设置媒体控件和播放操作。

  • 注册 MediaSessionCompat.Callback 来处理与 PiP 相关的回调。

  • 使用 setPictureInPictureParams() 方法进入画中画模式。

示例

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.media.session.MediaSessionCompat;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
   private MediaPlayer mediaPlayer;
   private MediaSessionCompat mediaSession;

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

      // Create a MediaSessionCompat object
      mediaSession = new MediaSessionCompat(this, "MyMediaSession");

      // Set up media controls and actions
      MediaSessionCompat.Callback callback = new MediaSessionCompat.Callback() {
         @Override
         public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
            if (isInPictureInPictureMode) {
               // Update UI for Picture-in-Picture mode
            } else {
               // Update UI when PiP mode is exited
            }
         }
         // Other media callbacks...
      };
      mediaSession.setCallback(callback);

      // Initialize MediaPlayer
      mediaPlayer = MediaPlayer.create(this, R.raw.video);

      Button pipButton = findViewById(R.id.pip_button);
      pipButton.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            // Enter Picture-in-Picture mode
            PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();
            enterPictureInPictureMode(builder.build());
         }
      });
   }

   @Override
   protected void onDestroy() {
      super.onDestroy();
      // Release resources
      mediaPlayer.release();
      mediaSession.release();
   }
}

输出

使用自定义视频播放器实现画中画模式

在这里,您使用 SurfaceView 或 TextureView 实现一个自定义视频播放器来显示视频。您在自定义播放器中处理视频播放和控件,并使用 enterPictureInPictureMode() 方法管理到 PiP 模式转换。

算法

  • 使用 SurfaceView 或 TextureView 实现一个自定义视频播放器来显示视频。

  • 在自定义播放器中处理视频播放和控件。

  • 使用 enterPictureInPictureMode() 方法管理到 PiP 模式的转换。

示例

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Rational;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
   private CustomVideoPlayerView playerView;

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

      playerView = findViewById(R.id.player_view);

      Button pipButton = findViewById(R.id.pip_button);
      pipButton.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            enterPictureInPictureMode();
         }
      });
   }

   @Override
   protected void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
      super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);

      if (isInPictureInPictureMode) {
         // Update UI for Picture-in-Picture mode
         playerView.hideControls();
      } else {
         // Update UI when PiP mode is exited
         playerView.showControls();
      }
   }
}

输出

使用 WebView 实现画中画模式

此方法涉及使用 WebView.loadUrl() 在 WebView 中加载视频或媒体内容。您为视频播放实现必要的 WebView 回调,检测视频何时应进入 PiP 模式,并调用 enterPictureInPictureMode() 以启动到画中画模式的转换。

算法

  • 使用 WebView.loadUrl() 在 WebView 中加载视频或媒体内容。

  • 为视频播放实现必要的 WebView 回调。

  • 检测视频何时应进入 PiP 模式并调用 enterPictureInPictureMode()。

示例

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {
   private WebView webView;

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

      webView = findViewById(R.id.webview);
      webView.setWebChromeClient(new WebChromeClient());
      webView.setWebViewClient(new WebViewClient());
      WebSettings webSettings = webView.getSettings();
      webSettings.setJavaScriptEnabled(true);

      Button pipButton = findViewById(R.id.pip_button);
      pipButton.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            enterPictureInPictureMode();
         }
      });

      webView.loadUrl("https://www.example.com/video");
   }

   @Override
   protected void onStop() {
      super.onStop();
      webView.onPause();
      webView.pauseTimers();
   }

   @Override
   protected void onResume() {
      super.onResume();
      webView.resumeTimers();
      webView.onResume();
   }

   @Override
   protected void onDestroy() {
      super.onDestroy();
      webView.destroy();
   }
}

输出

结论

开发人员可以使用画中画 (PiP) 来改善 Android 中的用户体验。此功能允许用户进行多任务处理并在使用其他应用程序时在一个小的叠加层中查看媒体内容。通过使用媒体播放器、自定义视频播放器或 WebView 方法实现 PiP,开发人员为用户提供了无缝且便捷的多任务处理体验。最终,这将提高其 Android 应用程序的可用性和参与度。

更新于: 2023-07-26

835 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告