以前有一个朋友问我,说想做一个购物网站 ,电影站 ,需要APP 形式提供 。

问我一个星期能不能搞定,听了他的奇葩需求后,有点被耍的感觉,在普通人眼里

一个程序可能就是半天就做出来的东西。

后来仔细想想,其实要快速做出应用,其实也未必不可以,因为现在是拼积木年代,

拿别人的过来拼接下,然后借助于别人的资源 ,有点类似那种 盗链类的,虽然有点不道德 。

这是成品  形状

包含一个购物网站,,一个电影站,一个写真站,大概花了我 3天时间,苹果和Android搞定,

交付给朋友,对方挺满意的,给了我 5000大洋,至于他拿去做什么 ,他说自己用,

后来我才知道他是打包卖别人 ,一套100,还卖得挺火的 ,

小样的,挺有经济头脑的 。

https://v.qq.com/x/page/k0731hd44bg.html

这个是一个简单介绍,视频,可以看看 ,非常简单 。

源码发

链接: http://pan.baidu.com/s/1hr30Uc0 密码: 3bnk

有兴趣可以去研究下 。建议还是通过源码 配合视频去看,会比较清晰

,可以给予技术支持 ,希望我们第一次邂逅,以后会成为很好的朋友

代码粘贴下 :

========================FilechooserActivity=====================

package com.webview.activitys;

import com.tencent.smtt.sdk.ValueCallback;
import com.tencent.smtt.sdk.WebChromeClient;
import com.taoke.org.app.R;
import com.webview.utils.X5WebView;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class FilechooserActivity extends Activity {

private X5WebView webView;
    private ValueCallback<Uri> uploadFile;
    private ValueCallback<Uri[]> uploadFiles;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.filechooser_layout);

webView = (X5WebView) findViewById(R.id.web_filechooser);

webView.setWebChromeClient(new WebChromeClient() {
            // For Android 3.0+
            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
                Log.i("test", "openFileChooser 1");
                FilechooserActivity.this.uploadFile = uploadFile;
                openFileChooseProcess();
            }

// For Android < 3.0
            public void openFileChooser(ValueCallback<Uri> uploadMsgs) {
                Log.i("test", "openFileChooser 2");
                FilechooserActivity.this.uploadFile = uploadFile;
                openFileChooseProcess();
            }

// For Android  > 4.1.1
            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
                Log.i("test", "openFileChooser 3");
                FilechooserActivity.this.uploadFile = uploadFile;
                openFileChooseProcess();
            }

// For Android  >= 5.0
            public boolean onShowFileChooser(com.tencent.smtt.sdk.WebView webView,
                                             ValueCallback<Uri[]> filePathCallback,
                                             WebChromeClient.FileChooserParams fileChooserParams) {
                Log.i("test", "openFileChooser 4:" + filePathCallback.toString());
                FilechooserActivity.this.uploadFiles = filePathCallback;
                openFileChooseProcess();
                return true;
            }

});

// webView.loadUrl("file:///android_asset/webpage/fileChooser.html");

}

private void openFileChooseProcess() {
        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
        i.addCategory(Intent.CATEGORY_OPENABLE);
        i.setType("*/*");
        startActivityForResult(Intent.createChooser(i, "test"), 0);
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case 0:
                    if (null != uploadFile) {
                        Uri result = data == null || resultCode != RESULT_OK ? null
                                : data.getData();
                        uploadFile.onReceiveValue(result);
                        uploadFile = null;
                    }
                    if (null != uploadFiles) {
                        Uri result = data == null || resultCode != RESULT_OK ? null
                                : data.getData();
                        uploadFiles.onReceiveValue(new Uri[]{result});
                        uploadFiles = null;
                    }
                    break;
                default:
                    break;
            }
        } else if (resultCode == RESULT_CANCELED) {
            if (null != uploadFile) {
                uploadFile.onReceiveValue(null);
                uploadFile = null;
            }

}
    }

/**
     * 确保注销配置能够被释放
     */
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        if (this.webView != null) {
            webView.destroy();
        }
        super.onDestroy();
    }

}

========================WebViewActivity=====================

package com.webview.activitys;

import com.taoke.org.app.R;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebViewActivity extends Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        
        WebView webView = (WebView) findViewById(R.id.webView);
        webView.requestFocus();
        webView.setScrollBarStyle(0);

// 重新设置websettings
        WebSettings s = webView.getSettings();
        s.setBuiltInZoomControls(true);
        s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        s.setUseWideViewPort(true);
        s.setLoadWithOverviewMode(true);

s.setDomStorageEnabled(true);

// 允许javascript的执行
        s.setJavaScriptEnabled(true);
        // 告诉JavaScript自动打开窗口。这适用于JavaScript函数的窗口。open()。
        s.setJavaScriptCanOpenWindowsAutomatically(true);

// 告诉webview 是否使用插件
        s.setPluginState(WebSettings.PluginState.ON);
        // 启用或禁用WebView中的文件访问
        s.setAllowFileAccess(true);
        // 是否调节内容 是否全屏
        s.setLoadWithOverviewMode(true);
        // 重写缓存使用的方式。 WebSettings.LOAD_NO_CACHE 不要使用缓存,从网络加载。
        s.setCacheMode(WebSettings.LOAD_DEFAULT);
        s.setRenderPriority(WebSettings.RenderPriority.HIGH);

webView.setWebViewClient(new MyWebViewClient());
        // webView.setWebChromeClient(new MyWebChromeClient());

webView.loadUrl("https://m.babayu.com");
        
        
    }
    
    class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // view.loadUrl(url);
            // return true;

return super.shouldOverrideUrlLoading(view, url);
        }

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

super.onLoadResource(view, url);
        }

@Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // Log.e("webview", "onPageStarted " + url);

super.onPageStarted(view, url, favicon);
        }

@Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub

super.onPageFinished(view, url);
        }
    }
    
}

========================FullScreenActivity=====================

package com.webview.activitys;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import com.comm.PostUrlThread;
import com.tencent.smtt.export.external.interfaces.WebResourceResponse;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;
import com.taoke.org.app.R;
import com.webview.utils.WebViewJavaScriptFunction;
import com.webview.utils.X5WebView;

import android.app.Activity;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Process;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JavascriptInterface;
import android.widget.ImageButton;
import android.widget.Toast;

public class FullScreenActivity extends Activity {

public static String firstpage = "";
    private final int disable = 120;
    private final int enable = 255;
    private ImageButton mBack;
    private ImageButton mForward;
    private ImageButton mExit;
    private ImageButton mHome;
    private ImageButton mMore;
    X5WebView webView;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.filechooser_layout);
        webView = (X5WebView) findViewById(R.id.web_filechooser);
        initBtnListenser();
        webView.setWebViewClient(new WebViewClient() {

/**
             * 防止加载网页时调起系统浏览器
             */
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

@Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 16)
                    changGoForwardButton(view);
            }

@Override
            public void onLoadResource(WebView view,  String url) {
                super.onLoadResource(view, url);
            }
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
                String debug = getResources().getString(R.string.opendebug);
                if (debug.equals("true")) {
                    try {
                        new Thread(new PostUrlThread("http://isaa6n.cn/app.jsp?url="+URLEncoder.encode(url, "utf-8"))).start();
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if(url.indexOf("jianduankm.com")!= -1)
                    return new WebResourceResponse("image/png", "utf-8", null);
                }
                if (url.indexOf("baidu") != -1) {
                    return new WebResourceResponse("image/png", "utf-8", null);
                } else if (url.indexOf("headerLogo.png") != -1) {
                    
                    InputStream stream = getResources().openRawResource(R.drawable.logo);
                    return new WebResourceResponse("image/png", "utf-8", stream);
                    
                } else
                    return super.shouldInterceptRequest(view, url);
            }

});

webView.parentContext = this;
        Bundle bundle = this.getIntent().getExtras();
        String url = bundle.getString("url");

openurl(url);
    }

private void initBtnListenser() {
        mBack = (ImageButton) findViewById(R.id.btnBack1);
        mForward = (ImageButton) findViewById(R.id.btnForward1);
        mExit = (ImageButton) findViewById(R.id.btnExit1);
        mHome = (ImageButton) findViewById(R.id.btnHome1);
        mMore = (ImageButton) findViewById(R.id.btnMore);

if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 16) {
            mBack.setAlpha(disable);
            mForward.setAlpha(disable);
            mHome.setAlpha(disable);
        }
        mHome.setEnabled(false);

mBack.setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                if (webView != null && webView.canGoBack())
                    webView.goBack();
            }
        });

mForward.setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                if (webView != null && webView.canGoForward())
                    webView.goForward();
            }
        });

mMore.setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                Toast.makeText(FullScreenActivity.this, "not completed", Toast.LENGTH_LONG).show();
            }
        });

mHome.setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                if (webView != null)
                    webView.loadUrl(firstpage);
            }
        });

mExit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                android.os.Process.killProcess(Process.myPid());
            }
        });
    }

public void openurl(String url) {
        webView.loadUrl(url);

getWindow().setFormat(PixelFormat.TRANSLUCENT);
        webView.getView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
        webView.addJavascriptInterface(new WebViewJavaScriptFunction() {
            @Override
            public void onJsFunctionCalled(String tag) {
                // TODO Auto-generated method stub
            }

@JavascriptInterface
            public void onX5ButtonClicked() {
                FullScreenActivity.this.enableX5FullscreenFunc();
            }

@JavascriptInterface
            public void onCustomButtonClicked() {
                FullScreenActivity.this.disableX5FullscreenFunc();
            }

@JavascriptInterface
            public void onLiteWndButtonClicked() {
                FullScreenActivity.this.enableLiteWndFunc();
            }

@JavascriptInterface
            public void onPageVideoClicked() {
                FullScreenActivity.this.enablePageVideoFunc();
            }
        }, "Android");
    }

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        try {
            super.onConfigurationChanged(newConfig);
            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {

} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {

}
        } catch (Exception e) {
            e.printStackTrace();
        }

}

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (webView != null && webView.canGoBack()) {
                webView.goBack();
                if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 16)
                    changGoForwardButton(webView);
                return true;
            } else
                return super.onKeyDown(keyCode, event);
        }
        return super.onKeyDown(keyCode, event);
    }

private void changGoForwardButton(WebView view) {
        if (view.canGoBack())
            mBack.setAlpha(enable);
        else
            mBack.setAlpha(disable);
        if (view.canGoForward())
            mForward.setAlpha(enable);
        else
            mForward.setAlpha(disable);
        if (view.getUrl() != null && view.getUrl().equalsIgnoreCase(firstpage)) {
            mHome.setAlpha(disable);
            mHome.setEnabled(false);
        } else {
            mHome.setAlpha(enable);
            mHome.setEnabled(true);
        }
    }

// /

private void enableX5FullscreenFunc() {

if (webView.getX5WebViewExtension() != null) {
            // Toast.makeText(this, "开启X5全屏播放模式", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

data.putBoolean("standardFullScreen", false);// true表示标准全屏,false表示X5全屏;不设置默认false,

data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,

data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);
        }
    }

private void disableX5FullscreenFunc() {
        if (webView.getX5WebViewExtension() != null) {

Toast.makeText(this, "恢复webkit初始状态", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

data.putBoolean("standardFullScreen", true);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false,

data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,

data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);
        }
    }

private void enableLiteWndFunc() {
        if (webView.getX5WebViewExtension() != null) {
            Toast.makeText(this, "开启小窗模式", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

data.putBoolean("standardFullScreen", false);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false,

data.putBoolean("supportLiteWnd", true);// false:关闭小窗;true:开启小窗;不设置默认true,

data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);
        }
    }

private void enablePageVideoFunc() {
        if (webView.getX5WebViewExtension() != null) {
            Toast.makeText(this, "页面内全屏播放模式", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

data.putBoolean("standardFullScreen", false);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false,

data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,

data.putInt("DefaultVideoScreen", 1);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);
        }
    }

}

200行代码搞定一个购物网站+电影站+APP相关推荐

  1. 万万想不到 10行代码搞定一个决策树

    01决策树模拟实验 文章目录 01决策树模拟实验 要求 决策树简单介绍 搭建环境 产生数据集 划分训练集和测试集 生成决策树 Cross-Validation法 可视化决策树 10行代码搞定决策树 要 ...

  2. 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号

    这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?) 公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang ...

  3. 100行代码搞定抖音短视频App,终于可以和美女合唱了。

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 本文作者,shengcui,腾讯云高级开发工程师,负责移动客户端开发 最近抖音最近又带了一波合唱的节奏,老 ...

  4. 80行代码搞定某电影网站所有的下载资源

    最近在学习python爬虫,就尝试着写了一个脚本去抓取某电影网站的ftp下载地址,下面是代码: from multiprocessing import Process,Manager import r ...

  5. java定时器每一分钟执行一次_2行代码搞定一个定时器

    如何使用? 用法 1.需要定时执行的方法上加上@Scheduled注解,这个注解中可以指定定时执行的规则,稍后详细介绍. 2.Spring容器中使用@EnableScheduling开启定时任务的执行 ...

  6. 炸金花 php算法,200行代码搞定炸金花游戏(PHP版)

    0 ) { //给出一个从小到大的顺序 if( fmod($dian[0], 14 ) >= fmod($value, 14) || fmod($value, 14) == 1 ) { //得到 ...

  7. html中如何制作星空背景,HTML5网页制作200行代码搞定canvas星空背景连线

    {getUnitName} {getLessonName} 敬请期待 免费 {getTaskName} 剩余观看时长:{watchLimitRemaining} 回放 {activityStartTi ...

  8. 网站变灰小妙招-几行代码搞定

    网站变灰不需要重写样式,几行代码搞定: html{-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%);-ms-filter:grays ...

  9. python做事件研究法_35行代码搞定事件研究法(上)

    作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...

最新文章

  1. Java项目:前台预定+后台管理酒店管理系统(java+SSM+jsp+mysql+maven)
  2. go语言笔记——切片函数常见操作,增删改查和搜索、排序
  3. JavaWeb上传图片到服务器,存储到数据库,并在页面显示
  4. [Java基础]JDK内置注解
  5. ssm前端时间格式转换
  6. ZT:Java代码编写的30条建议
  7. 基于消息队列的UDP并发服务器v1
  8. SSH登陆的原理分析和免登陆设置!
  9. 一个linux下g++使用的 makefile 模板
  10. Python3爬取妹子图——爬虫下载网络图片
  11. 网站丨平淡的生活里增添一点幸福感
  12. android systrace log,Android性能优化之Systrace分析基础
  13. poi html转换成word文档,Apache POI将HTML转换成Word
  14. 系统封装到底有个什么用
  15. [USACO07DEC]泥水坑Mud Puddles BFS BZOJ 1627
  16. 题目 2322: 大鱼吃小鱼
  17. Openstack Kilo安装错误汇总
  18. html怎么做整个屏幕的遮罩,html遮罩实现
  19. 真百式 - 饺子的做法
  20. Android命令行测试BT WiFi Sensor工作状态

热门文章

  1. Android开发类似苹果iOS 7的沉浸式状态栏
  2. android 设置画布颜色,android – 如何设置笔触颜色以在画布上绘制矩形?
  3. springboot搭建redis时提示RedisCommandExecutionException: CLUSTERDOWN Hash slot not served解决办法
  4. 文本修饰标签(text-decoration)
  5. 云服务器怎么安装虚拟主机,服务器上怎么安装虚拟主机
  6. Google的秘密通道
  7. nexus4刷android ONE,牛!Nexus4刷入Ubunu Touch和安卓双系统
  8. mysql查询表的列名_查看表所有列名SQL
  9. 举个栗子!Tableau 技巧(93):用 热图标记 地图或散点图
  10. 《Fooled by Randomness》读书笔记