这个项目有一个奇葩的需求,开机后自动打开Miracast并使得设备处于可被搜索状态。打开设置,进入“显示”界面,点击最下方的“投射屏幕”即可进入Miracast界面,开启右上角的无线显示,打开“其他设备可检测到此设备”,即会弹出一个Dialog,显示“正在等待其他设备发起连接邀请”,需求就是开机后即让设备处于该状态。并且在有其他设备请求连接时直接连接,无需确认。后来才知道这么奇葩的需求是因为这个设备没有触摸屏。同时第一次使用Miracast会弹出一个帮助界面提示怎样退出投屏,这也是需要去掉的。
要想正常使用Miracast我们首先得连上Wifi。因为设备没有触摸屏,所以我们要有一个连接指定Wifi的动作。下面分享一个从网上找的帮助类:
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import java.util.List;
public class WifiHelper {
// 定义WifiManager对象
private WifiManager mWifiManager;
// 定义WifiInfo对象
private WifiInfo mWifiInfo;
// 扫描出的网络连接列表
private List<ScanResult> mWifiList;
// 网络连接列表
private List<WifiConfiguration> mWifiConfiguration;
// 定义一个WifiLock
WifiManager.WifiLock mWifiLock;
// 构造器
public WifiHelper(Context context) {
// 取得WifiManager对象
mWifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 取得WifiInfo对象
mWifiInfo = mWifiManager.getConnectionInfo();
}
// 打开WIFI
public void openWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
// 关闭WIFI
public void closeWifi() {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
// 检查当前WIFI状态
public int checkState() {
return mWifiManager.getWifiState();
}
// 锁定WifiLock
public void acquireWifiLock() {
mWifiLock.acquire();
}
// 解锁WifiLock
public void releaseWifiLock() {
// 判断时候锁定
if (mWifiLock.isHeld()) {
mWifiLock.acquire();
}
}