亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么實現設備的異顯功能

發布時間:2022-02-21 09:31:48 來源:億速云 閱讀:192 作者:iii 欄目:開發技術

這篇文章主要講解了“Android怎么實現設備的異顯功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Android怎么實現設備的異顯功能”吧!

    一、什么是異顯

    無線投屏或者有線投屏的時候,安卓設備的畫面會原封不動的投影在顯示器上,這就是投屏。   

    而異顯,則是安卓設備和顯示器的畫面分開顯示,比如安卓設備上在聊天,顯示器上還可以在播放電影,是不是和多窗口的感覺有點像。

    當然,安卓設備需要支持VGA/HDMI顯示。 哪些設備支持呢,我在某商家店面上發現只有部分設備是支持的。

    另外有部分安卓設備同時支持投屏和辦公兩種模式,有部分安卓設置則只支持投屏。    

    二、實現步驟

    2.1 權限

    • 靜態權限

    在實現投屏功能之前,應該去允許操作投屏的權限,它的權限實際上是顯示系統窗口的權限,在配置文件中

    <!-- 顯示系統窗口權限 -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <!-- 在 屏幕最頂部顯示-->
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
    • 動態權限

    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);
        }
    }

    界面布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/purple_200"
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/tv_test"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="異顯"
            android:textSize="50sp" />
    
    </RelativeLayout>

    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怎么實現設備的異顯功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    涡阳县| 阜新| 慈溪市| 合肥市| 余江县| 南阳市| 渝北区| 东莞市| 闵行区| 连南| 荥阳市| 张家口市| 荔波县| 宜丰县| 铜川市| 嘉定区| 龙门县| 克拉玛依市| 玉龙| 阿巴嘎旗| 库车县| 高雄县| 中阳县| 西丰县| 宝丰县| 南昌县| 民权县| 上犹县| 黑山县| 昌黎县| 鹤庆县| 黔江区| 元朗区| 马关县| 那坡县| 东山县| 唐海县| 定安县| 滕州市| 娱乐| 汝阳县|