Android(安卓)调用H5界面(交互)
16lz
2021-01-26
public class UserInfoActivity extends AppCompatActivity implements WebView.OnClickListener{ private WebView webView; private ValueCallback mUploadMessage;// 表单的数据信息 private ValueCallback mUploadCallbackAboveL; private final static int FILECHOOSER_RESULTCODE = 1;// 表单的结果回调 private Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_info); webView = (WebView)findViewById(R.id.wv); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.setWebChromeClient(new UserInfoActivity.MyWebChromeClient()); webView.addJavascriptInterface(this, "android"); Map extraHeaders = new HashMap<>(); extraHeaders.put("Authorization", GlobalValue.Authorization); webView.loadUrl("http://47.92.170.10/puth/usermsg/userinfoedit",extraHeaders); CacheActivity.addActivity(this); if(Build.VERSION.SDK_INT >= 21) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); getWindow().setStatusBarColor(Color.TRANSPARENT); } } @Override public void onClick(View view) { } //下面的两个方法是让网页来调的 //这个注解必须加 因为 兼容问题 @JavascriptInterface public void setClose() {// Toast.makeText(this, "关闭页面", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.setClass(this,MainActivity.class); startActivity(intent); UserInfoActivity.this.finish(); } @JavascriptInterface public void reLogin() { SharedPreferences sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("isLogin", "no"); editor.commit(); Intent intent = new Intent(); intent.setClass(this,LoginActivity.class); startActivity(intent); UserInfoActivity.this.finish(); } @JavascriptInterface public void setMessage(String info) {// try {// WebViewUserInfoEntity entity = new Gson().fromJson(info,WebViewUserInfoEntity.class);// SharedPreferences sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE);// SharedPreferences.Editor editor = sharedPreferences.edit();// editor.putInt("simulation_status", entity.simulation_status);// editor.putInt("hospital_status",entity.hospital_status);// editor.putBoolean("userInfo", entity.userinfo);// editor.commit();// }catch (Exception e){// Toast.makeText(this, "format error", Toast.LENGTH_SHORT).show();// } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); } private class MyWebChromeClient extends WebChromeClient { //这个重新的方法是为了让js支持alert。不需要的可以去掉 @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } //设置网页加载的进度条 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress);// if (newProgress == 100) {// mProgressBar.setVisibility(View.GONE);// } else {// mProgressBar.setVisibility(View.VISIBLE);// mProgressBar.setProgress(newProgress);// } } //android>5.0调用这个方法 @Override public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { mUploadCallbackAboveL=filePathCallback; take(); return true; } public void openFileChooser(ValueCallback uploadMsg) { mUploadMessage=uploadMsg; take(); } public void openFileChooser(ValueCallback uploadMsg,String acceptType) { mUploadMessage=uploadMsg; take(); } public void openFileChooser(ValueCallback uploadMsg,String acceptType, String capture) { mUploadMessage=uploadMsg; take(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==FILECHOOSER_RESULTCODE) { if (null == mUploadMessage && null == mUploadCallbackAboveL) return; Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); if (mUploadCallbackAboveL != null) { onActivityResultAboveL(requestCode, resultCode, data); } else if (mUploadMessage != null) { Log.e("result",result+""); if(result==null){// mUploadMessage.onReceiveValue(imageUri); mUploadMessage.onReceiveValue(imageUri); mUploadMessage = null; Log.e("imageUri",imageUri+""); }else { mUploadMessage.onReceiveValue(result); mUploadMessage = null; } } } } @SuppressWarnings("null") @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) { if (requestCode != FILECHOOSER_RESULTCODE || mUploadCallbackAboveL == null) { return; } Uri[] results = null; if (resultCode == Activity.RESULT_OK) { if (data == null) { results = new Uri[]{imageUri}; } else { String dataString = data.getDataString(); ClipData clipData = data.getClipData(); if (clipData != null) { results = new Uri[clipData.getItemCount()]; for (int i = 0; i < clipData.getItemCount(); i++) { ClipData.Item item = clipData.getItemAt(i); results[i] = item.getUri(); } } if (dataString != null) results = new Uri[]{Uri.parse(dataString)}; } } if(results!=null){ mUploadCallbackAboveL.onReceiveValue(results); mUploadCallbackAboveL = null; }else{ results = new Uri[]{imageUri}; mUploadCallbackAboveL.onReceiveValue(results); mUploadCallbackAboveL = null; } return; } private void take(){ File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyApp"); // Create the storage directory if it does not exist if (! imageStorageDir.exists()){ imageStorageDir.mkdirs(); } File file = new File(imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg"); imageUri = Uri.fromFile(file); final List cameraIntents = new ArrayList(); final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); final PackageManager packageManager = getPackageManager(); final List listCam = packageManager.queryIntentActivities(captureIntent, 0); for(ResolveInfo res : listCam) { final String packageName = res.activityInfo.packageName; final Intent i = new Intent(captureIntent); i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); i.setPackage(packageName); i.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); cameraIntents.add(i); } Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); Intent chooserIntent = Intent.createChooser(i,"Image Chooser"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{})); UserInfoActivity.this.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); }}
更多相关文章
- InputFilter方法filter 解释
- Android工程方法数超过65535,解决办法
- Android中Java与JavaScript之间交互
- android 之 3G/gprs
- Android(安卓)使用Parcelable接口
- Android(安卓)之Http
- 交互式实例
- Android学习笔记(2)————Android四大组件之二(Service )
- Android学习笔记(1)————Android四大组件之一(Activity)