「这是我参加2022首次更文应战的第26天,活动概况检查:2022首次更文应战」
Android异显注意事项
大部分的手机实际上不支持异显的,所以目前来说异显是个小众的运用场景。大部分需求的是同屏运用,即屏幕投影到大屏上,但这样的话需求显现器有软件支持,比方苹果的AirPlay。这篇文章的意图是为了记录一些奇葩的注意事项。
监听HDMI衔接事情
坑:先说坑,在华为某机型上监听不到,也无法判别HDMI衔接状况.
导致的问题: 理想状况是在HDMI衔接之后,显现副屏,因为我们无法知道HDMI衔接状况,所以每次显现副屏,就需求在保证衔接HDMI之后手动经过按钮翻开。
我目前还不知道怎样解决这个问题,有知道的麻烦指引一下。
在RK某系列的主板上测试可用。
- 办法: 播送监听
经过注册动态播送监听HDMI的衔接和断开事情。
播送代码:
public class HdmiListener extends BroadcastReceiver {
private final String TAG = "HdmiListener";
private final static String HDMI_ACTION = "android.intent.action.HDMI_PLUGGED";
private final HdmiStateCallback mHdmiStateCallback;
public HdmiListener(HdmiStateCallback callback) {
this.mHdmiStateCallback = callback;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null) {
String action = intent.getAction();
if (TextUtils.equals(HDMI_ACTION, action)) {
//HDMI插拔的播送事情
boolean state = intent.getBooleanExtra("state", false);
//事情返回一个Boolean类型的state值,依据state值能够判别其状况,true表已衔接,false表断开。
Log.e("HdmiListener", "state:" + state);
if (mHdmiStateCallback != null)
mHdmiStateCallback.hdmiState(state);
}
}
}
public interface HdmiStateCallback {
void hdmiState(boolean isConnected);
}
}
Activity 代码
// 动态注册播送
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(HDMI_ACTION);
mHdmiListener = new HdmiListener(this);
registerReceiver(mHdmiListener, intentFilter);
@Override
public void hdmiState(boolean isConnected) {
Log.d(TAG, "isConnected:" + isConnected);
if (isConnected) {
try {
Thread.sleep(2000);
showPresentation();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
值得注意的是,在链接HDMI之后,不能立刻去操作副屏,需求增加2秒的延时,之后才能够显现副屏。
判别是否衔接HDMI
上诉代码是监听HDMI衔接和断开的事情。还有一种办法能够经过读取本地文件判别HDMI是否衔接。
/**
* 播送只能监听HDMI的插拔 第一次进入程序时不知道HDMI的衔接状况
* 此刻需求去读系统文件去判别HDMI的衔接状况
*
* @return true 衔接 false 未衔接
*/
public static boolean isHdmiSwitchSet() {
// The file '/sys/devices/virtual/switch/hdmi/state' holds an int -- if it's 1 then an HDMI device is connected.
// An alternative file to check is '/sys/class/switch/hdmi/state' which exists instead on certain devices.
File switchFile = new File("/sys/devices/virtual/switch/hdmi/state");
if (!switchFile.exists()) {
switchFile = new File("/sys/class/switch/hdmi/state");
}
try {
Scanner switchFileScanner = new Scanner(switchFile);
int switchValue = switchFileScanner.nextInt();
switchFileScanner.close();
return switchValue > 0;
} catch (Exception e) {
return false;
}
}
相同的这个办法在华为某平板上仍旧不起作用,在RK系列的主板上有用。
网上有一种说法是,第一次不会呼应HDMI播送事情,我自己试下来,是能监听到了。
这两种办法配合着一起运用,就能完全判别HDMI衔接状况了。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。