webview的一个通用类

本文介绍了一个基于Android平台使用WebView实现JS与Java交互的具体案例。通过定义AndroidJsBridge类并将其注入WebView中,使JavaScript可以调用原生方法。此外,还展示了如何加载外部网页、初始化WebView设置及响应页面加载事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


public class AndroidJsBridge {

@android.webkit.JavascriptInterface
public void getPhoto() {

}
}














public class WebActivity extends BaseActivity {
private static final String TAG = WebActivity. class.getSimpleName() ;
private static final String EXTEND_JS_OBJECT = "android" ;

protected WebView mWebView ;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
}

protected void initWeb(WebView webView) {
mWebView = webView ;
WebSettings webSettings = webView.getSettings() ;
webSettings.setUseWideViewPort( true) ;
webSettings.setLoadWithOverviewMode( true) ;
webSettings.setJavaScriptEnabled( true) ;
webSettings.setCacheMode(WebSettings. LOAD_DEFAULT) ; //设置 缓存模式
webSettings.setDomStorageEnabled( true) ;
webSettings.setDatabaseEnabled( true) ;
webSettings.setAppCacheEnabled( true) ;
webView.setWebViewClient( new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view , String url) {
view.loadUrl(url) ;
return true;
}

@Override
public void onPageStarted(WebView view , String url , Bitmap favicon) {
}

@Override
public void onPageFinished(WebView view , String url) {

}
}) ;

webView.setWebChromeClient( new WebChromeClient() {
@Override
public void onProgressChanged(WebView view , int newProgress) {

}

@Override
public void onConsoleMessage(String message , int lineNumber , String sourceID) {
Logger. d( TAG , message + " -- From line " + lineNumber + " of " + sourceID) ;
}

@Override
public boolean onConsoleMessage(ConsoleMessage cm) {
Logger. d( TAG , cm.message() + " -- From line " + cm.lineNumber() + " of "
+ cm.sourceId()) ;
return true;
}
}) ;
}

protected void loadUrl(String url) {
mWebView.loadUrl(url) ;
}

protected void addJsMethod(AndroidJsBridge obj) {
mWebView.addJavascriptInterface(obj , EXTEND_JS_OBJECT) ;
}

@Override
protected void onDestroy() {
mWebView.stopLoading() ;
mWebView.removeAllViews() ;
mWebView.destroy() ;
super.onDestroy() ;
}
}

















public class WriteDailyActivity extends WebActivity {



private static final String TAG = WriteDailyActivity. class.getSimpleName() ;
@BindView(R.id. iv_back)
ImageView ivBack ;
@BindView(R.id. tv_materail_title)
TextView tvMaterailTitle ;
@BindView(R.id. tv_appbar_right)
TextView tvAppbarRight ;

private WebView msWebview ;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_write_daily) ;
ButterKnife. bind( this) ;

initview() ;
initdata() ;
}

private void initview() {
tvAppbarRight.setVisibility(View. VISIBLE) ;
tvAppbarRight.setText( "完成") ;
tvMaterailTitle.setText( "写日报") ;
msWebview = (WebView) findViewById(R.id. webview) ;
}

private void initdata() {
initWeb( msWebview) ;
addJsMethod( new ExtendJsObject()) ;
String url = " http://192.168.1.105:6001/ " ;
// String url = " http://192.168.31.107:6001/ ";
loadUrl(url) ;
}

@OnClick({R.id. iv_back , R.id. tv_appbar_right})
public void onClick(View view) {
switch (view.getId()) {
case R.id. iv_back:
finish() ;
break;
case R.id. tv_appbar_right:
// 发布日报
getContent() ;

break;
}
}

// js调用这些方法
private class ExtendJsObject extends AndroidJsBridge {

@JavascriptInterface
public int[] jsGetTaskNum() {
//弹出popup 选择任务。 返回任务int【】数组给js
Log. i( TAG , "jsGetTaskNum: ") ;
Handler handler = new Handler(getMainLooper()) ;
handler.post( new Runnable() {
@Override
public void run() {
//弹出popup
}
}) ;
return new int[]{ 1 , 4 , 5} ;
}

@JavascriptInterface
public int jsGetTime() {
//弹出时间选择器
Handler handler = new Handler(getMainLooper()) ;
handler.post( new Runnable() {
@Override
public void run() {
initTimePicker() ;
}
}) ;
Log. i( TAG , "jsGetTime: ") ;
return 2222 ;
}

@JavascriptInterface
public void jsGetIntentUrl( int type) {
Log. i( TAG , "jsGetIntentUrl: " + type) ;
if (type == 1) {
//跳转至成果展示。
}
if (type == 2) {
//跳转到代码连接。
}
}

@JavascriptInterface
public void jsGetContent(String str) {
Log. i( TAG , "content: "+str) ;
}
}


//调用时间选择器
private void initTimePicker() {
TimePickerView timePickerView ;
timePickerView = new TimePickerView( this, TimePickerView.Type. YEAR_MONTH_DAY) ;
Calendar calendar = Calendar. getInstance() ;
timePickerView.setRange(calendar.get(Calendar. YEAR) - 50 , calendar.get(Calendar. YEAR)) ; //要在setTime 之前才有效果哦
timePickerView.setTime( new Date()) ;
timePickerView.setCyclic( false) ;
timePickerView.setCancelable( true) ;
timePickerView.setOnTimeSelectListener( new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date) {
Date dates = new Date() ;
int years = dates.getYear() - date.getYear() ;

}
}) ;
timePickerView.show() ;
}

private void getContent(){
Handler handler = new Handler(getMainLooper()) ;
handler.post( new Runnable() {
@Override
public void run() {
msWebview.loadUrl( "javascript:content()") ;
}
}) ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值