200行代码搞定一个购物网站+电影站+APP
以前有一个朋友问我,说想做一个购物网站 ,电影站 ,需要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相关推荐
- 万万想不到 10行代码搞定一个决策树
01决策树模拟实验 文章目录 01决策树模拟实验 要求 决策树简单介绍 搭建环境 产生数据集 划分训练集和测试集 生成决策树 Cross-Validation法 可视化决策树 10行代码搞定决策树 要 ...
- 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号
这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?) 公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang ...
- 100行代码搞定抖音短视频App,终于可以和美女合唱了。
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 本文作者,shengcui,腾讯云高级开发工程师,负责移动客户端开发 最近抖音最近又带了一波合唱的节奏,老 ...
- 80行代码搞定某电影网站所有的下载资源
最近在学习python爬虫,就尝试着写了一个脚本去抓取某电影网站的ftp下载地址,下面是代码: from multiprocessing import Process,Manager import r ...
- java定时器每一分钟执行一次_2行代码搞定一个定时器
如何使用? 用法 1.需要定时执行的方法上加上@Scheduled注解,这个注解中可以指定定时执行的规则,稍后详细介绍. 2.Spring容器中使用@EnableScheduling开启定时任务的执行 ...
- 炸金花 php算法,200行代码搞定炸金花游戏(PHP版)
0 ) { //给出一个从小到大的顺序 if( fmod($dian[0], 14 ) >= fmod($value, 14) || fmod($value, 14) == 1 ) { //得到 ...
- html中如何制作星空背景,HTML5网页制作200行代码搞定canvas星空背景连线
{getUnitName} {getLessonName} 敬请期待 免费 {getTaskName} 剩余观看时长:{watchLimitRemaining} 回放 {activityStartTi ...
- 网站变灰小妙招-几行代码搞定
网站变灰不需要重写样式,几行代码搞定: html{-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%);-ms-filter:grays ...
- python做事件研究法_35行代码搞定事件研究法(上)
作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...
最新文章
- Java项目:前台预定+后台管理酒店管理系统(java+SSM+jsp+mysql+maven)
- go语言笔记——切片函数常见操作,增删改查和搜索、排序
- JavaWeb上传图片到服务器,存储到数据库,并在页面显示
- [Java基础]JDK内置注解
- ssm前端时间格式转换
- ZT:Java代码编写的30条建议
- 基于消息队列的UDP并发服务器v1
- SSH登陆的原理分析和免登陆设置!
- 一个linux下g++使用的 makefile 模板
- Python3爬取妹子图——爬虫下载网络图片
- 网站丨平淡的生活里增添一点幸福感
- android systrace log,Android性能优化之Systrace分析基础
- poi html转换成word文档,Apache POI将HTML转换成Word
- 系统封装到底有个什么用
- [USACO07DEC]泥水坑Mud Puddles BFS BZOJ 1627
- 题目 2322: 大鱼吃小鱼
- Openstack Kilo安装错误汇总
- html怎么做整个屏幕的遮罩,html遮罩实现
- 真百式 - 饺子的做法
- Android命令行测试BT WiFi Sensor工作状态
热门文章
- Android开发类似苹果iOS 7的沉浸式状态栏
- android 设置画布颜色,android – 如何设置笔触颜色以在画布上绘制矩形?
- springboot搭建redis时提示RedisCommandExecutionException: CLUSTERDOWN Hash slot not served解决办法
- 文本修饰标签(text-decoration)
- 云服务器怎么安装虚拟主机,服务器上怎么安装虚拟主机
- Google的秘密通道
- nexus4刷android ONE,牛!Nexus4刷入Ubunu Touch和安卓双系统
- mysql查询表的列名_查看表所有列名SQL
- 举个栗子!Tableau 技巧(93):用 热图标记 地图或散点图
- 《Fooled by Randomness》读书笔记