Android webview与Javascript

js中调用安卓方法。
mWebView.addJavascriptInterface(new JsInterface(),”EdutechcommWv”);
mWebView.getSettings().setJavaScriptEnabled(true);
public class JsInterface{

public JsInterface() {
}

@JavascriptInterface
public void getPlatformIp(){
mWebView.loadUrl(“javascript:window.API_ROOT = “+ip+”;”);//注入JS,JS的window直接获取数据信息
return;
}

@JavascriptInterface
public String getUserInfo(){
return “userinfo”;//直接返回数据,js获取处理
}
}

Android问题汇总

1.recycleview 只显示第一条数据
处理方法:item的父布局的高度设置为wrap-content
2.类似直播连麦,二个surfaceview播放直播流,需要大小窗口切换主视频,切换过程中会出现某个surfaceview透明显示不出的情况。
处理方法:setZOrderMediaOverlay设置小窗口为true,设置主窗口为false。小窗口布局层级在主窗口之上。
if(mVideoItemStudent!=null&&mVideoItemStudent.getSurfaceView()!=null){
mVideoItemStudent.getSurfaceView().setZOrderMediaOverlay(false);
}
if(mVideoItemTeacher!=null&&mVideoItemTeacher.getSurfaceView()!=null){
mVideoItemTeacher.getSurfaceView().setZOrderMediaOverlay(true);
}//luojie 二个surfaceview播放视频流,如果不只设置Zorder为true,在某些设备上可能会有某个surface会透明显示不出,
3.好的日历插件
implementation ‘com.haibin:calendarview:3.6.9’
4.targetVersion超过28,安卓不允许在根目录创建文件夹;
5.当Wi-Fi不能访问外网时,socket内网连接会有异常,处理办法如下:
private void useWifiNetWork(){
ConnectivityManager connection_manager =
(ConnectivityManager) getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connection_manager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() {

@Override
public void onAvailable(Network network) {
ConnectivityManager.setProcessDefaultNetwork(network);
}
});
}
6.socket:通过在service中发心跳包保持连接,但是当手机休眠时socket会无法发送数据,可用的解决办法如下:
可以在oncreate中:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “xxx:xxx”);
wl.acquire();
在ondestroy中:
if(wl!=null){
wl.release();
}
acquire和release的次数必须是一致的,否则会有异常。
7.抓取摄像头视频流,然后将视频流数据同步给服务端,可用的方案有:
a.开启摄像头预览,抓取预览的图片数据YUV格式,将图片数据按照需求做下转换,将数据传递给mediacodec编码,将处理好的流数据通过协议发送给服务端。
b.相机将预览画面通过render渲染在GLSurfaceview,mediacodec设置inputsurface,然后去编码,再将处理好的数据通过协议发送给服务端。
8.相机预览模糊:设置previewsize是否设置的太小;相机自动对焦是否设置。