Launcher中獲取副屏分辨率、密度

目的是要在launcher的副屏顯示廣告,所以第一是要控制副屏,第二是要適配.因?yàn)橹髌聊缓透逼聊怀叽?、密度都不一樣所以必須獲取副屏信息

獲取到副屏

我使用了控制媒體通道獲取屏幕信息

MediaRouter允許應(yīng)用程序控制媒體通道和流從當(dāng)前設(shè)備到外部揚(yáng)聲器和目標(biāo)設(shè)備的路由

要注意的是MediaRouter的API不是線(xiàn)程安全的;與它的所有交互都必須在流程的主線(xiàn)程中完成

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            MediaRouter mediaRouter = MediaRouter.getInstance(this);
            List<MediaRouter.RouteInfo> routes = mediaRouter.getRoutes();
            Display display = null;
            for (MediaRouter.RouteInfo routeInfo : routes) {
           //我的設(shè)備只有一個(gè)副屏
                if (routeInfo.getPresentationDisplay() != null) {
                  //display就是我要拿到的副屏信息
                    display = routeInfo.getPresentationDisplay();
                    break;
                }
            }

            if (display != null) {
                presentation = new MainPresentation(this, display);
              //控制顯示副屏
                presentation.show();
            }
        }
斷點(diǎn)看看獲取的信息

Presentation顯示

Presentation是一種特殊的dialog(繼承自Dialog),用于副屏顯示控制

使用例子:

DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
 Display[] presentationDisplays = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
  if (presentationDisplays.length > 0) {
      // If there is more than one suitable presentation display, then we could consider
    // giving the user a choice.  For this example, we simply choose the first display
     // which is the one the system recommends as the preferred presentation display.
    Display display = presentationDisplays[0];
    Presentation presentation = new MyPresentation(context, presentationDisplay);
   presentation.show();

代碼獲取屏幕分辨率,密度
屏幕密度:為每英寸像素點(diǎn)數(shù)


/**
 * 屏幕管理類(lèi)
 */
@SuppressLint({"NewApi"})
public class MainPresentation extends Presentation {
    private static final String TAG = "MainPresentation";
    private Context mContext;
    private Display mParamDisplay;

    public MainPresentation(Context paramContext, Display paramDisplay) {
        super(paramContext, paramDisplay);
        mContext = paramContext;
        mParamDisplay = paramDisplay;

    }

    @Override
    protected void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        setContentView(R.layout.main_presentation);
        //獲取Height  Width
        if (mParamDisplay != null) {
            int physicalHeight = mParamDisplay.getMode().getPhysicalHeight();
            int physicalWidth = mParamDisplay.getMode().getPhysicalWidth();
        }

        //獲取屏幕密度
        DisplayMetrics displayMetrics = new DisplayMetrics();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            mParamDisplay.getRealMetrics(displayMetrics);
        } else {
            mParamDisplay.getMetrics(displayMetrics);
        }
        String density = String.valueOf(displayMetrics.densityDpi);
        Log.e(TAG, "onCreate density: " + density);
    }


}

如何知道獲取的是否正確,可以dump屏幕信息進(jìn)行對(duì)比

adb shell dumpsys display

Display 1為副屏
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容