分类 Android 下的文章 - 炫Q香蕉派

分类 Android 下的文章

android的tcp client

TcpClientConnector

package com.hadisi.socket;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * Created by hadisi on 2016/6/28.
 */

public class TcpClientConnector {
    private static TcpClientConnector mTcpClientConnector;
    private Socket mClient;
    private ConnectLinstener mListener;
    private Thread mConnectThread;

    public interface ConnectLinstener {
        void onReceiveData(String data);
    }

    public void setOnConnectLinstener(ConnectLinstener linstener) {
        this.mListener = linstener;
    }

    public static TcpClientConnector getInstance() {
        if (mTcpClientConnector == null)
            mTcpClientConnector = new TcpClientConnector();
        return mTcpClientConnector;
    }

    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 100:
                    if (mListener != null) {
                        mListener.onReceiveData(msg.getData().getString("data"));
                    }
                    break;
            }
        }
    };

    public void creatConnect(final String mSerIP, final int mSerPort) {
        if (mConnectThread == null) {
            mConnectThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        connect(mSerIP, mSerPort);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
            mConnectThread.start();
        }
    }

    /**
     * 与服务端进行连接
     *
     * @throws IOException
     */
    private void connect(String mSerIP, int mSerPort) throws IOException {
        if (mClient == null) {
            mClient = new Socket(mSerIP, mSerPort);
        }
        InputStream inputStream = mClient.getInputStream();
        byte[] buffer = new byte[1024];
        int len = -1;
        while ((len = inputStream.read(buffer)) != -1) {
            String data = new String(buffer, 0, len);
            Message message = new Message();
            message.what = 100;
            Bundle bundle = new Bundle();
            bundle.putString("data", data);
            message.setData(bundle);
            mHandler.sendMessage(message);
        }
    }

    /**
     * 发送数据
     *
     * @param data 需要发送的内容
     */
    public void send(String data) throws IOException {
        OutputStream outputStream = mClient.getOutputStream();
        outputStream.write(data.getBytes());
    }

    /**
     * 断开连接
     *
     * @throws IOException
     */
    public void disconnect() throws IOException {
        if (mClient != null) {
            mClient.close();
            mClient = null;
        }
    }
}

用法

connector = TcpClientConnector.getInstance();
connector.creatConnect("服务端IP地址","服务端端口号");
connector.setOnConnectLinstener(new TcpClientConnector.ConnectLinstener() {
    @Override
    public void onReceiveData(String data) {
        //do somethings.
    }
});
connector.send("要发送的内容");
@Override
protected void onDestroy() {
    super.onDestroy();
    try {
        connector.disconnect();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

确实帮了忙,第一次网络打赏
参考地址:
https://www.jianshu.com/p/338a61ee5b42

玩M5STACK

很精致,很精致,很精致
首先是开发环境,下载最新的Arduino IDE版本是1.8.4,有160M。
打开IDE,文件->首选项->附加开发板管理器网址:http://www.M5Stack.com/download/package_m5stack_index.json
工具->开发板->开发板管理器,搜索M5就剩一个了,版本是0.0.3,点击安装,35M,速度比起下载IDE,慢多了
40多分钟,下了28M,一个没注意,电脑待机了,回来就不动了,悲催了
先下2014的driver吧,竟然win10都不带驱动
还好可以断点,一个多小时35M下完,还有76M的第二包,秒下,剩下的50%进度是安装,也很快
按照说明,工具->开发板->M5Stack,工具->端口->COM5(装完驱动出来的)
文件->示例->M5Stack->Basic->Hello,然后点箭头运行就可以了,和8266一样,编译慢,下载也慢。

#include <M5Stack.h>

// the setup routine runs once when M5Stack starts up
void setup(){

  // Initialize the M5Stack object
  m5.begin();
  
  // LCD display
  m5.Lcd.printf("hello MikuQ.com");
}

// the loop routine runs over and over again forever
void loop() {

}

最后不得不说的是150mA的电池和1W的喇叭都挺鸡肋的

华为日志信息显示不全的解决

不得不说,华为很有个性,连调试日志都显示不全,以前一直是忍,今天兴起,查查原因吧,果然动了手脚

*#*#2846579#*#*

然后找到LOG项,打开AP LOG,也不知道是什么,但总算显示全了

Android的错误

遭遇错误

Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: 

命令行输入

gradlew compileDebug --stacktrace

结果

A problem occurred evaluating project ':app'.
> java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0

无果,后来发现是版本问题

compileSdkVersion 15
buildToolsVersion "20.0.0"

buildTools25太高了,改成了20,这个问题就好了,新的问题.9.png的问题

给Arduino程序签名

首先要进入命令行,keytool是java带的一个工具

keytool -genkey -v -keystore D:\mikuq.keystore -alias mikuq -keyalg RSA -validity 10000

大意是生成一个mikuq的证书,别名一样,采用RSA算法,有效期10000天,也就20多年吧,会被问到一些问题

您的名字与姓氏是什么?
  [mikuq]:  mikuq
您的组织单位名称是什么?
  [mikuq.com]:
您的组织名称是什么?
  [mikuq]:
您所在的城市或区域名称是什么?
  [bj]:
您所在的省/市/自治区名称是什么?
  [bj]:
该单位的双字母国家/地区代码是什么?
  [cn]:
CN=mikuq, OU=mikuq.com, O=mikuq, L=bj, ST=bj, C=cn是否正确?
  [否]:  y

然后就生成好啦,很多地方要用到指纹,如何提取呢

keytool -list -v -alias mikuq -keystore D:\mikuq.keystore

证书放app文件夹
build.gradle加

android {
    signingConfigs {
        release {
            storeFile file("mikuq.keystore")
            storePassword "******"
            keyAlias "mikuq"
            keyPassword "******"
        }
        debug {
            storeFile file("mikuq.keystore")
        }
    }

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