Android之项目开发中在app内Intent意图跳转自己指定的Html5页面

Android之项目开发中在app内Intent意图跳转自己指定的Html5页面

常规的跳转我们都知道是用Intent,但是Intent一般用于Activity间的跳转,这里我们只有一个URL,那么怎样实现跳转呢?

下面开始

Class.forName(“Test”)适用多个跳转页面String传值

Intent intent = new Intent();                  
intent.putExtra("key", "value");
try {                                       intent.setClass(context.getApplicationContext()
        ,Class.forName("Test"));
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );                context.getApplicationContext().startActivity(intent);

Test.class单一的

Intent intent = new Intent();                  
intent.putExtra("key", "value");
try {                                           intent.setClass(context.getApplicationContext(),Test.class);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );                context.getApplicationContext().startActivity(intent);

直接跳到手机浏览器,不在app里面了

 Intent intent = new Intent();
 intent.setAction("android.intent.action.VIEW");
 Uri content_url = Uri.parse("https://www.baidu.com/");
 intent.setData(content_url);
 startActivity(intent);

跳转手机浏览器算什么,我直接打开其他应用,例如美团地址打开高德地图导航,相信大家不陌生吧

ComponentName componentName=new ComponentName("com.lany.screenshot","com.lany.screenshot.MainActivity");
Intent intent = new Intent();
intent.setComponent(componentName);
intent.setAction(Intent.ACTION_VIEW);
intent.putExtra("Version", getSimpleVersionInfo());
intent.putExtra("buildNumber", buildNumber);   
startActivity(intent);

除了跳转,还可以附带数据,注意在跳转到其他app时,跳转到的app必须在跳转到的界面的manifest文件中定义exported=true,否则无法正常跳转。

这个也是H5但是却跳出了自己的app,工程中不太需要

 Intent intent = new Intent();
 intent.setAction("android.intent.action.VIEW");
 Uri content_url = Uri.parse("https://www.baidu.com/");
 intent.setData(content_url);
 startActivity(intent);

给大家来个秒杀其他博客的东西,项目实在开发必须

其实兼容Html5网页的最好的方式是如下。。。

 Intent intent = new Intent();
 intent.putExtra("H5Url", "https://www.baidu.com/");                   intent.setClass(context.getApplicationContext(),H5WebViewActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );                context.getApplicationContext().startActivity(intent);

H5WebViewActivity,这个自己随便找个,主要用处就是webView的使用,不会的百度吧

这个是样式,不能直接copy,这种写法就用到了intent的传值,其他啥也没有但是,你可以传任何字段

public class H5WebViewActivity extends JSONWadeActivity {

    private WebView webview;//调用内置浏览器控件

    private ProgressDialog myDialog;//进度对话框
    /*
     * 定时规则:
     * 开始加载页面时,启动定时器,页面加载完成时关闭定时器,超过timeout时间还没有加载完成的页面,定时任务停止页面加载并关闭定时器
     * 如果网页内部通过iframe进行提交查询,本定时规则无效
     * 可能会异常退出,取消定时器
     */
    private String mainUrl;//首页
    private String currentUrl;//当前url
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_local_h5);


        webview=(WebView)findViewById(R.id.lsWebViewH5);//获取控件
        webview.clearHistory();//清空访问历史
        webview.setBackgroundColor(Color.TRANSPARENT);//设置webview背景色透明,使背景图片可见
        WebSettings setting=webview.getSettings();
        setting.setJavaScriptEnabled(true);//可以使用javascript,有风险
        setting.setSupportZoom(true);//支持缩放
        setting.setBuiltInZoomControls(true);//出现缩放工具
        //webview.addJavascriptInterface(new JsInterface(), "JsInterface");//js脚本可以调用的类
        //在当前webview中打开连接,不要跳到系统浏览器中
        webview.setWebViewClient(new WebViewClient(){

            //请求页面失败
            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                //请求失败的处理404
                view.stopLoading();
                view.clearView();
                Message msg=handler.obtainMessage();
                msg.what=1;
                handler.sendMessage(msg);

            }

            //开始请求页面
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                //Log.d("GERL", "onPageStarted url="+url);
                showMyDialog();//显示进度窗口
                currentUrl=url;//记录当前页面地址
                //startTimer();//开启计时器
            }

            //请求页面加载完成
            @Override
            public void onPageFinished(WebView view, String url) {
                //Log.d("GERL", "onPageFinished");
                closeMyDialog();//关闭进度提示
                super.onPageFinished(view, url);
                //stopTimer();//不管是否加载完了,到时将定时器停止
            }
        });
        //设定一个WebChromeClient否则js alert不能弹出
        webview.setWebChromeClient(new WebChromeClient() {

            // 重写js alert方法,调用android对话框显示,否则会显示网页地址,如“10.0.2.2处的页面表明”
            @Override
            public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
                AlertDialog ab = new AlertDialog.Builder(
                        H5WebViewActivity.this).setTitle("提示")
                        .setMessage(message).setPositiveButton("确定", new DialogInterface.OnClickListener(){
                            @Override
                            public void onClick(DialogInterface dialog,int which) {
                                // 点击确定关闭
                                dialog.dismiss();
                            }
                        }).create();
                ab.show();
                result.cancel();//不写这句,弹窗后不能点击页面,写了这句,不能阻止js继续向下执行
                return true;
                // return super.onJsAlert(view, url, message, result);
            }
            @Override
            public boolean onJsConfirm(WebView view, String url,
                    String message, JsResult result) {
                // TODO Auto-generated method stub
                return super.onJsConfirm(view, url, message, result);
            }
        });
        //开始请求页面
        mainUrl = getIntent().getStringExtra("H5Url");
        webview.loadUrl(mainUrl);
    }
    /** 
    * 重写按键响应,在WebView中查看网页时,按返回键的时候按浏览历史退回,如果不做此项处理则整个WebView返回退出 
    */ 
    public boolean onKeyDown(int keyCode,KeyEvent event){
        //Log.d("GERL", "onKeyDown=="+keyCode);
        if(keyCode==KeyEvent.KEYCODE_BACK){
            //Log.d("GERL", "onKeyDown goBack");
            //返回键,当前页面不是首页的返回首页,是首页的就退出
            if(currentUrl!=null && !currentUrl.equals(mainUrl)){
                webview.loadUrl(mainUrl);
                return true;
            }
            /*
            if(webview.canGoBack()){
                webview.goBack();
                return true;
            }*/
        }
        return super.onKeyDown(keyCode, event); 
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        closeMyDialog();//注销的时候把dialog也注销吧
        super.onDestroy();
    }

    @SuppressLint("HandlerLeak")
    private Handler handler=new Handler(){//消息处理器
        @Override
        public void handleMessage(Message msg) {
            //Log.d("GERL", "handleMessage what=="+msg.what);
            closeMyDialog();
            switch (msg.what){
            case 1://加载失败
                Toast.makeText(H5WebViewActivity.this, "请求数据失败!",Toast.LENGTH_SHORT).show();
                //webview.loadUrl("file:///android_asset/ls404.html");
                finish();
                break;
            case 2://加载超时
                Toast.makeText(H5WebViewActivity.this, "请求超时失败!",Toast.LENGTH_SHORT).show();
                webview.stopLoading();
                webview.loadUrl("file:///android_asset/ls404.html");
                break;
            }
        }
    };
    /**
     * 显示进度窗口
     */
    public void showMyDialog() {
        myDialog = new ProgressDialog(this);
        myDialog.setMessage("正在请求数据,请稍等...");
        myDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        myDialog.show();
    }
    /**
     * 关闭进度窗口
     */
    public void closeMyDialog(){
        if(myDialog!=null && myDialog.isShowing()){
            myDialog.dismiss();
        }
    }
    /**
     * k值
     * @param managerId
     * @return
     */
    private int getK(String managerId){
        int a=0;
        if(managerId==null || managerId.length()==0){
            a=88;
        }else{
            for(int i=0;i<managerId.length();i++){
                a+=managerId.charAt(i);
            }
        }
        int b=a/2;
        Calendar t=Calendar.getInstance();
        int c=t.get(Calendar.DATE);
        int d=t.get(Calendar.MONTH);
        return ((a+c+d+922)*b%2014);
    }
}

好了完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值