千家信息网

Android怎么实现设备的异显功能

发表于:2024-10-25 作者:千家信息网编辑
千家信息网最后更新 2024年10月25日,这篇文章主要讲解了"Android怎么实现设备的异显功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android怎么实现设备的异显功能"吧!一、什
千家信息网最后更新 2024年10月25日Android怎么实现设备的异显功能

这篇文章主要讲解了"Android怎么实现设备的异显功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android怎么实现设备的异显功能"吧!

    一、什么是异显

    无线投屏或者有线投屏的时候,安卓设备的画面会原封不动的投影在显示器上,这就是投屏。

    而异显,则是安卓设备和显示器的画面分开显示,比如安卓设备上在聊天,显示器上还可以在播放电影,是不是和多窗口的感觉有点像。

    当然,安卓设备需要支持VGA/HDMI显示。 哪些设备支持呢,我在某商家店面上发现只有部分设备是支持的。

    另外有部分安卓设备同时支持投屏和办公两种模式,有部分安卓设置则只支持投屏。

    二、实现步骤

    2.1 权限

    • 静态权限

    在实现投屏功能之前,应该去允许操作投屏的权限,它的权限实际上是显示系统窗口的权限,在配置文件中

    • 动态权限

    if (Build.VERSION.SDK_INT >= 23) {            if (!Settings.canDrawOverlays(MainActivity.this)) {                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,                        Uri.parse("package:" + getPackageName()));                startActivityForResult(intent, 10);            }        }         @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (requestCode == 10) {            if (Build.VERSION.SDK_INT >= 23) {                if (!Settings.canDrawOverlays(this)) {                    // SYSTEM_ALERT_WINDOW permission not granted...                    Toast.makeText(MainActivity.this, "not granted", Toast.LENGTH_SHORT);                }            }        }        super.onActivityResult(requestCode, resultCode, data);    }

    为什么需要这些权限,因为副屏的主要类Presentation是继承与Dialog的

    2.2 定义分屏的界面

    public class DifferentDisplay extends Presentation {    public DifferentDisplay(Context outerContext, Display display) {        super(outerContext, display);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.diffrentdisplay);    }    public void setText(String text) {        TextView textView = findViewById(R.id.tv_test);        textView.setText(text);    }}

    界面布局

        

    2.3 操作分屏界面

    先放代码再来说明

    public class MainActivity extends AppCompatActivity {    final String TAG = "MainActivity";    DifferentDisplay mPresentation;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 双屏显示        DisplayManager mDisplayManager; //屏幕管理类        Display[] displays;// 屏幕数组        mDisplayManager = (DisplayManager) MainActivity.this.getSystemService(Context.DISPLAY_SERVICE);        displays = mDisplayManager.getDisplays(); // 得到显示器数组        if (displays.length == 0) {            Log.d(TAG, "无显示屏");            return;        }        mPresentation = new DifferentDisplay(getApplicationContext(), displays[1]);//displays[1]是副屏       // 8.0 需要替换为 TYPE_APPLICATION_OVERLAY mPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);        mPresentation.show();    }    int index = 1;    public void Test(View view) {        if (mPresentation != null)            mPresentation.setText(++index + "点击");    }}

    Display[] displays是获取的屏幕的个数,包括安卓设备自身的屏幕。 比如new DifferentDisplay(getApplicationContext(), displays[1]) 操作的就是第一块副屏。

    另外有个权限问题

    mPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

    上诉代码在6.0及以上是可以的(未验证),但在8.0以上需要这样使用
    8.0以上需要将:WindowManager.LayoutParams.TYPE_SYSTEM_ALERT 替换为:WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY

    感谢各位的阅读,以上就是"Android怎么实现设备的异显功能"的内容了,经过本文的学习后,相信大家对Android怎么实现设备的异显功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

    0