uniapp自定义入口Activity并进行交互

第一步:首先新建自己的MainActivity

package cn.com.sway.app

import android.os.Bundle;

import io.dcloud.WebAppActivity;

public class MainActivity extends WebAppActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    public boolean isStreamAppMode() {
        return false;
    }

}

注意:

1、务必集成io.dcloud.WebAppActivity这个类

2、必须要有isStreamAppMode方法,如果没有这个方法,会无法正常加载页面

第二部:在AndroidManifest.xml里修改入口Activity

    <activity
            android:name="cn.com.sway.app.MainActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|navigation"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:hardwareAccelerated="true"
            android:theme="@style/TranslucentTheme"
            android:screenOrientation="user"
            android:windowSoftInputMode="adjustResize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

其他:在前端与MainActivity进行交互

前端这么写:

var main = plus.android.runtimeMainActivity();//获取当前的Activity
var res = main.getResData();//直接调用自定义Activity中的getResData方法
console.log(res);

在MainActivity补充getResData方法:

public String getResData(){
    return data;
}

 

Javascript:Json对象与Json字符串的转化

1.jQuery插件支持的转换方式

$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象

 

2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:

JSON.stringify(obj)将JSON转为字符串。JSON.parse(string)将字符串转为JSON格式;

var a={“name”:”tom”,”sex”:”男”,”age”:”24″}; 
var b='{“name”:”Mike”,”sex”:”女”,”age”:”29″}’; 
var aToStr=JSON.stringify(a); 
var bToObj=JSON.parse(b); 
alert(typeof(aToStr));  //string 
alert(typeof(bToObj));//object

 

3.Javascript支持的转换方式: 
eval(‘(‘ + jsonstr + ‘)’); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号 
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。

 

4.JSON官方的转换方式: 
http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法; 
可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。

uni-app离线android打包使用scheme

hbuilder版本:3.1.12

在AndroidManifest.xml中对io.dcloud.PandoraEntry添加scheme内容(注意不是io.dcloud.PandoraEntryActivity)

        <activity
            android:name="io.dcloud.PandoraEntry"
            android:configChanges="orientation|keyboardHidden|keyboard|navigation"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:hardwareAccelerated="true"
            android:theme="@style/TranslucentTheme"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustResize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="xxxxx" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.oppopush" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

记得把scheme换成正确的。

android studio使用发布者证书调试

修改app.gradle文件:

android {
    ....................................................

    //配置keystore签名
    signingConfigs {
        release {
            storeFile file("./cert/android.keystore")
            storePassword "123456"
            keyAlias "android"
            keyPassword "123456"
        }
    }

    buildTypes {
        debug {
            debuggable true
            signingConfig signingConfigs.release
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
}

 

Android开发-禁止截图、录屏

只需要在 Activity 的onCreate() 方法中添加一行代码即可:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

添加这行代码后,当截屏的时候,系统会弹出一个Toast提示“禁止屏幕抓取”;当录屏的时候,看似能够正常录制,但是保存后的视频,都是一片黑色,并没有APP的相关界面。

如果开启禁止录屏后需要在某些场景取消的话,则使用以下语句即可:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);

 

使用chrome进行跨域请求调试

赠送不同版本chrome的下载地址:

https://www.chromedownloads.net/chrome64win-stable/

问题背景

在跨平台开发IDE常遇到调试问题,在浏览器进行异步请求时出现如下提示:

Access to XMLHttpRequest at 'https://***********' from origin 'http://www.sway.com.cn' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是因为跨域请求导致的,考虑到安全问题,浏览器默认是不允许进行跨域名访问的。

333

有时候我们在web开发时需要进行跨域调试,会出现上图错误提示。

49版本以前的解决方案

使用chrome的用户,可以找到chrome.exe的程序创建一个快捷方式,并在上图标识的位置加入如下参数:

 --args --disable-web-security --user-data-dir

49版本以后的解决方案

 

111

使用chrome的用户,可以找到chrome.exe的程序创建一个快捷方式,并在上图标识的位置加入如下参数:

 --args --disable-web-security --user-data-dir=C:\Users\****\MyChromeDevUserData

注意:****为您的winows账号目录名,另外还需要在该账号目录侠创建MyChromeDevUserData目录以保存相关的chrome信息。

222启动刚刚配置号的快捷方式,出现如上图标示的提示,即可开启跨域模式。

91版本以前的解决方案(未验证)

有的用户还是不能访问,此时在console控制台里会看到一段背景是黄颜色的字

...Specify SameSite=None and Secure if the cookie should be sent in cross-site...'

Chrome中访问地址chrome://flags/ 搜索samesite 将same-site-by-default-cookies,和SameSite by default cookies这两项设置为Disabled后重启浏览器再运行项目即可解决。该设置默认情况下会将未指定SameSite属性的请求看做SameSite=Lax来处理。

91版本-94版本以前的解决方案(未验证)

在chrome的快捷方式后面加上以下运行参数:

--disable-features=SameSiteByDefaultCookies

或者

--flag-switches-begin --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure --flag-switches-end

94版本以后的解决方案(未验证)

Chromium项目官网提到在94版本通过命令行禁用设置SameSite默认值的方式会被移除,到时方案1和方案2的方式都将无法使用,后续可通过nginx等代理工具或软件将跨域请求转为非跨域请求来解决改问题。以后如果要在开发环境作业, 老老实实上https也许是最简单的一种办法。

简易搭建局域网内部dns服务器

在做APP开发测试,由于手机不能像电脑修改host文件那样方便的映射dns,所以在局域网进行调试时,需要搭建一台DNS服务器用于给移动设备进行解析。

准备两台最小化Centos 7 服务器,一台用来搭建dns服务器,一台用来测试dns;一台window 10 用来测试dns,机器IP如下:

  • dns 服务器 IP:192.168.122.254
  • linux 客户端IP:192.168.0.71
  • window 客户端IP:192.168.0.254

实现步骤

  • 我们测试的域名:sway.com.cn
  • 使用bind搭建dns服务器
  • 防火墙开启53端口访问
  • 配置客户端的dsn服务
  • 测试dns使用

1、配置部署服务端

在需要搭建dns服务的centos 7机器上操作

  • 安装bind
yum -y install bind  bind-chroot bind-utils

安装完后,相关的配置主要涉及以下几个目录的文件:

/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #拓展配置文件
/var/named/ #zone 配置文件目录

  • named的核心配置文件:/etc/named.conf:

1、修改 listen-on port 53 { 127.0.0.1; }; 为 any

2、修改 allow-query { localhost; }; 为 any

listen-on port 53 { any; };

vim /etc/named.conf
options {
    listen-on port 53 { any; };  #监听0.0.0.0 53端口,ipv4
    listen-on-v6 port 53 { ::1; }; #监听0.0.0.0 53端口,ipv6
    directory   "/var/named";     #zone 目录
    dump-file   "/var/named/data/cache_dump.db"; #服务器存放数据库文件的路径名
    statistics-file "/var/named/data/named_stats.txt";  #
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { any; }; #允许查询
    recursion yes; #运行迭代
    dnssec-enable yes; 
    dnssec-validation yes;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";

    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
    type hint;
    file "named.ca";
};

include "/etc/named.rfc1912.zones"; #扩展配置文件
include "/etc/named.root.key";
  • 向拓展配置文件加入您的域名信息:/etc/named.rfc1912.zones
zone "szlz.com" IN {
        type master;
        file "sway.com.cn.zone";
};
  • 在/var/named/ #zone目录创建您的域名解析文件sway.com.cn.zone:
$TTL 1D
@       IN SOA  @ dns.sway.com.cn. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns
dns     A       192.168.122.254
web1    A       192.168.122.8
mail    A       192.168.122.2
        MX      10 mail.sway.com.cn.
test1   A       192.168.0.71
  • 使用named-checkzone命令检测您的配置文件:
named-checkzone
named-checkzone sway.com.cn /var/named/sway.com.cn.zone
  • 启动bind并开机自启动
systemctl start named
systemctl enable named

 

2、配置linux客户端的dns

修改/etc/resolv.conf文件设置dns服务器:

nameserver 192.168.122.254
nameserver 114.114.114.114

 

3、配置windows客户端的dns

修改网卡属性,设置ipv4协议中的dns服务器为:192.168.122.254

4、使用ping命令测试

使用ping dns.sway.com.cn查看解析是否正确即可

5、开启防火墙(如果有开防火墙的话)

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
iptables -A INPUT -p tcp --dport 53 -j ACCEPT

 

3D打印机RAMPS1.4关于4988驱动板的细分设置

ramps上对应每个4988驱动都有ms1,ms2,ms3三个短路块来调节细分(需要取下4988板子才可以看到),
ms1 | ms2 | ms3
no | no | no |全细分
yes | no | no |1/2(2细分)
no | yes | no | 1/4 (4细分)
yes | yes | no |1/8(8细分)
yes | yes | yes | 1/16(16细分)

 

常用电机行走1mm需要的脉冲数:

1.8度,16细分,16齿,100
1.8度,16细分,20齿,80
1.8度,32细分,16齿,200
1.8度,16细分,20齿,160

0.9度,16细分,16齿,200
0.9度,16细分,20齿,160
0.9度,32细分,16齿,400
0.9度,32细分,20齿,320

 

如果觉得计算麻烦也可以使用官方的计算器:

https://blog.prusaprinters.org/calculator_3416/

123

SpringBoot2.1.1使用Zuul创建SpringCloud微服务Gateway网关

1、在新的SpringBoot项目中的pom.xml引入如下依赖:

		<!-- 引入Zuul starter -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter</artifactId>
		</dependency>
		<!-- 连接Eureka -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

2、在pom.xml的project中加入SpringCloud的版本管理配置:

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

3、编辑配置文件application.propertites:

spring.application.name = zero4j-zuul-gateway

eureka.client.serviceUrl.defaultZone = http://admin:123456@localhost:8761/eureka/
eureka.instance.instance-id = ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
eureka.instance.prefer-ip-address = true

#只要访问以/api/v1/areas开头的多层目录都可以路由到服务名为zero4j-provider-area的服务上.
zuul.routes.zero4j-provider-area.path = /api/v1/areas
zuul.routes.zero4j-provider-area.service-id = zero4j-provider-area
zuul.routes.zero4j-provider-area.stripPrefix = false

server.port = 4000

4、最后在application启动类中加入@EnableDiscoveryClient和@EnableZuulProxy注解:

package com.zero4j;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableDiscoveryClient
@EnableZuulProxy
@SpringBootApplication
public class Zero4jZuulGatewayApplication {

	public static void main(String[] args) {
		SpringApplication.run(Zero4jZuulGatewayApplication.class, args);
	}

}

 

close