私.01.资料

1、二维码  baidu 搜索"android 生成二维码"

  1.1、Android进阶 - 二维码生成 - 简书.html(https://www.jianshu.com/p/b275e818de6a

  1.2、android两行代码生成二维码示例 - MyName_kk的博客 - CSDN博客.html(https://blog.csdn.net/myname_kk/article/details/77649477

 

2、串口通信  baidu 搜索"android 串口编程"

  2.1、Android串口通信(Android Studio) - 小王同志的博客 - CSDN博客.html(https://blog.csdn.net/qq_35952946/article/details/78863871

  2.2、Android 之 串口通信 - Mr.X - CSDN博客.html(https://blog.csdn.net/weixin_41046716/article/details/80137964

 

  2.3、怎么查看android 设备的串口_百度知道.html(https://zhidao.baidu.com/question/1669107706532261747.html

    ls /dev/tty *

  2.4、Android串口操作,简化android-serialport-api的demo(附源码) - akunainiannian的专栏 - CSDN博客.html(https://blog.csdn.net/akunainiannian/article/details/8740007

    ZC: 标题是 简化,但是 我看着 怎么那么繁琐... 比直接使用android-serialport-api的例子烦多了... 而且这篇文章里面的源码 买也不便宜...

 

  2.5、

   (1)、android串口编程--------如何在window7系统上模拟串口调试 - biiliwuiid的博客 - CSDN博客.html(https://blog.csdn.net/biiliwuiid/article/details/55095378

   (2)、Android串口通信 - monkey1992 - 博客园.html(https://www.cnblogs.com/1992monkey/p/4542430.html

   (3)、android 串口编程 - pangfumin - 博客园.html(https://www.cnblogs.com/akunainiannian/articles/2990463.html

 

  2.6、虚拟机中无法连接上串口

    Android 模拟器串口与PC虚拟串口通讯 - gd6321374的专栏 - CSDN博客.html(https://blog.csdn.net/gd6321374/article/details/74779770

      ZC:文章中说到“Android 5.0 以上的系统由于安全权限不一样,当运行SerialPort类的构造方法中下面代码,则会提示没有权限”

    public SerialPort(File device, int baudrate, int flags) throws SecurityException, IOException
    {
        /* Check access permission */
        if (!device.canRead() || !device.canWrite()) {
            try {
                /* Missing read/write permission, trying to chmod the file */
                Process su;
                su = Runtime.getRuntime().exec("/system/bin/su");
                String cmd = "chmod 666 " + device.getAbsolutePath() + "\n"
                        + "exit\n";
                su.getOutputStream().write(cmd.getBytes());
                if ((su.waitFor() != 0) || !device.canRead()
                        || !device.canWrite()) {
                    throw new SecurityException();
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new SecurityException();
            }
        }
    ... ...
    }

     ZC:我也注意到了这段代码,还把它独立拿出来测试:我使用 Android 6的SDK的虚拟机,发现 ttyS0/ttyS1/ttyS2判断出 它们是存在的,但是 都是不可读不可写的状态...  然后 我重新下载了 Android4.4的SDK,新建了Android4.4SDK的虚拟机,发现 打开串口是OK的了... ttyS0/ttyS1/ttyS2都不需要修改权限 直接就显示是可读可写的状态了,真是 系统版本差异?限制了?

     ZC:我的CMD命令为“???\android-sdk\tools>emulator @z02 -scale 0.7 -qemu -serial COM1”,发现 ttyS2 对应的是 Win7x64中虚拟出来的COM1口...

     ZC:我是这样测试 虚拟机中串口 和 Win7中串口的对应关系的(忘了是那篇文章中看到的了):(我这里是 Win7x64 虚拟出来 COM1和COM2是关联的) 用串口调试工具 连接COM2,然后在 adb shell 中输入如下命令:“echo "testMsg" > /dev/ttyS0”,“串口调试助手”里面没有信息打印出来的话 就是不对,再换一个 直到找到...

 

  2.7、3.6.3 Emulator命令列启动参数 - 51CTO.COM.html(http://book.51cto.com/art/200912/173721.htm

 

  ZC:线程 更新 主界面 信息

   (1)、线程及更新ui线程的简单理解 - 丽丽博客园 - 博客园.html(https://www.cnblogs.com/ll-ouyang/p/6481823.html

   (2)、子线程更新UI界面的2种方法 - 非余之渔 - 博客园.html(https://www.cnblogs.com/wdht/p/6137584.html

   (3)、子线程不能更新UI线程总结 - 这个时代,作为程序员可能要学习小程序 - CSDN博客.html(https://blog.csdn.net/androidstarjack/article/details/54238073

 

3、TCP 客户端

  baidu 搜索 "android TCP"

  3.1、【Android Socket专题】: TCP通信客户端app的demo的实现 - shankezh的博客 - CSDN博客.html(https://blog.csdn.net/shankezh/article/details/70763579

    ZC:在子线程向界面发送接收到的信息的时候,用到了 intent与activity.context.sendBroadcast搭配的方式。查了一下 貌似是用于 activity之间传递消息,貌似还是进程间通信的手段(Android 三种sendBroadCast的方式对比 - sduliulun的专栏 - CSDN博客.html [ https://blog.csdn.net/sduliulun/article/details/50206155 ]),但是 是广播的 会不会效率不好?或者 ∵是广播的 只管广播发出去 能不能接收到 就不一定能保证了??

4、SQLite

 4.1、导入导出命令

  (1)、【Android】通过控制台将sqlite数据库文件导出 - hong2511的博客 - CSDN博客.html(https://blog.csdn.net/hong2511/article/details/80950703

  (2)、Android 数据库(SQLite)的导入导出命令 - Minor昔年 - CSDN博客.html(https://blog.csdn.net/u013836857/article/details/51684069

 4.2、sqlite 自动编号

  SQLite数据库的id字段,怎么设置成从1开始自增?-CSDN论坛.html(https://bbs.csdn.net/topics/390739034

  SQLite中重置自动编号列的方法_SQLite_脚本之家.html(https://www.jb51.net/article/61575.htm

 4.3、

  Android 一篇很啰嗦的SQLite入门知识总结 - AnliaLee的博客 - CSDN博客.html(https://blog.csdn.net/lly347705530/article/details/79125373

  Android 操作SQLite基本用法 - 荣耀王者 - 博客园.html(https://www.cnblogs.com/foxy/p/7725010.html

  SQLite的介绍 操作Sqlite 具体实例 - 无恨星晨 - 博客园.html(https://www.cnblogs.com/weixing/p/3232994.html

 

 4.4、20181019

  (1)、SQLite 索引 _ 菜鸟教程.html(http://www.runoob.com/sqlite/sqlite-index.html

  (2)、sqlite时间段查询 - jiduoduo - 博客园.html(https://www.cnblogs.com/jiduoduo/p/6956217.html

    SQLite关于时间段查询的sql - - ITeye博客.html(http://alex-yang-xiansoftware-com.iteye.com/blog/1157214

  (3)、sqlite 获取当前时间 精确到毫秒 - nailsoul的专栏 - CSDN博客.html(https://blog.csdn.net/nailsoul/article/details/44596239

    Sqlite3中对于毫秒数和本地时间之间的转换以及时间相关操作_青春寂寞洒一地_新浪博客.html(http://blog.sina.com.cn/s/blog_648d306d0102wpcq.html

  (4)、sqlite3 存入当前时间。_百度知道.html(https://zhidao.baidu.com/question/456566237093587645.html

    sqlite3数据库写入时间操作 - 顺利的博客 - CSDN博客.html(https://blog.csdn.net/shunli008/article/details/78778606

  (5)、sqlite3查询表中最后一条记录 - xc889078的专栏 - CSDN博客.html(https://blog.csdn.net/xc889078/article/details/8793362

 

 

5、baidu 搜索 "android imageview"

  5.1、Android--UI之ImageView - 承香墨影 - 博客园.html(https://www.cnblogs.com/plokmju/p/android__ImageView.html

6、LinearLayout

  6.1、Android布局管理详解(1)—— LinearLayout 线性布局 - 瞳孔里的柔情 - 博客园.html(https://www.cnblogs.com/zzulihao/p/6535746.html

  6.2、【Android】Android中两种常用布局(LinearLayout和RelativeLayout) - widiot的博客 - CSDN博客.html(https://blog.csdn.net/white_idiot/article/details/54731668

    ZC:里面,将 <EditText/>的属性“android:layout_height="0dp"”,这样设置 表面看起来是 高度没有了,但是 实际上效果确是 <EditText/>的高 自适应在上下两个空间之间正好填满... 是这样子用的么?待测试...

    ZC:不只是通过 属性layout_height 来设置的,是通过 属性layout_weight 来设置的,通过这个属性 可以实现类似 Delphi中熟悉的布局效果!layout_weight + layout_width/layout_height(设为0dp)

  6.3、如何使LinearLayout可以滚动? - 问答 - 云+社区 - 腾讯云.html(https://cloud.tencent.com/developer/ask/33211

    ZC:这样弄:“<ScrollView<LinearLayout ...>...</LinearLayout></ScrollView>”,用 <ScrollView/>包裹起来

    ZC:横向的话,使用 <HorizontalScrollView/>包裹

7、获取时间 & 时间格式化输出(baidu 搜 "android 时间格式化")

  7.1、android 时间获取以及时间格式化 - wdd1324的博客 - CSDN博客.html(https://blog.csdn.net/wdd1324/article/details/71169977

    long time=System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis();  

  7.2、android 时间格式 各种转换 - 丶贰九 - 博客园.html(https://www.cnblogs.com/kevin-chen/p/7239650.html

  7.3、Android时间间隔 SystemClock.uptimeMillis 和 System.currentTimeMillis - 方耀宇的专栏 - CSDN博客.html(https://blog.csdn.net/fangyoayu2013/article/details/50786611

    SystemClock.uptimeMillis() // 从开机到现在的毫秒数(手机睡眠的时间不包括在内); // ZC: 类似于 Windows下的 GetTickCount()
    System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;// 获取的时间,是可以通过System.setCurrentTimeMillis修改的,那么,在某些情况下,一但被修改,时间间隔就不准了。// ZC: 类似于 Windows下获取系统的时间,但是 时间被修改了的话 毫秒数也就变化了(时间变化了 毫秒数本来就应该变化的啊...)

8、开机自启动

  baodu搜索"android 开机自启动"

  8.1、android实现程序开机自启动 - jetereting - 博客园.html(https://www.cnblogs.com/jetereting/p/4572302.html

  8.2、Android应用如何开机自启动、自启动失败的原因、接收不到BOOT_COMPLETED广播可能的原因、adb命令发送BOOT_COMPLETED.html(http://www.trinea.cn/android/android-boot_completed-not-work/

    adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

    adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n package_name/class_name

9、android 判断网络是否可用 - 谢岩的博客 - CSDN博客.html(https://blog.csdn.net/bzlj2912009596/article/details/70882300

  ZC:(1)检查网络是否可用  (2)当网络不可用的时候,我们应该提供一个 界面让用户区设置网络连接  (3)判断网络类型的代码  (4)判断网络状态改变的代码,就是一个广播接收器

10、

 10.1、红米Note4X,“...\platform-tools>adb pull "/sdcard/stu.db" "d:\zzz"

  我一直访问 SQLite的文件不成功,貌似是∵我没有root,在 pull的时候一直报错 “remote object "... ..." does not exist”(pull目录的时候 说 不存在,pull文件的时候也说 不存在)。在 “/data/data/com.testSQLite”和“/data/user/0/com.testSQLite/files” 里面 也不能执行 "ls"(权限)

  万般无奈下,我把 stu.db创建到 sdcard目录中,这下可以做操作了(也能看到文件了,也能pull文件了...)

  adb shell 中执行命令 "sqlite"/"sqlite1"/"sqlite2"/"sqlite3"/"sqlite4"/"sqlite5"/"sqlite6",都说没有这个命令,难道也是∵ 权限? 据说 sqlite是在 目录"/system/xbin"中(这个目录里面也看不了信息...) 

  ZC:机子里面没有 sqlite3程序?看到网上说 可以copy一个程序进去:

如果没有,可以通过360手机助手,从电脑上传入到system/xbin目录下面。

还有个坑,要确保sqlite3的版本跟手机版本匹配,可以去网上下载相应的版本。

从虚拟机导出的sqlite3文件,push到手机里,然后操作数据库发现不能用! 
报:sh: /system/xbin/sqlite3: not executable: magic 7F45错误。

原来它是要使用跟你真机CPU型号相同的sqlite3文件,比如你的测试机是4.2版本,而你的studio的SDK是5.0以上版本,这样你从虚拟机里导出的sqlite3文件5.0版本,而你手机想对应的应该是4.0版本,那sqlite3文件会不匹配,所以报这个错误!只需要下载跟手机想符的sqlite3文件就可以了,5.0是一个分水岭!

 

 10.2、使用root权限,虽然我的机子没有root,执行命令都不成功...:没进 shell时 "adb root",进了 shell 后 "su root"

 10.3、使用 SQLiteDatabase.openOrCreateDatabase(...) 创建数据库(文件)时,如果是在 没有权限的目录下的话,会出错(貌似程序会崩溃退出)。使用 java.io.File::createNewFile() 来创建 数据库文件的话,也是一样的 程序会崩溃退出

 10.4、SQLite 查看工具:(1)、火狐插件sqlite manager;(2)、调试SQLite数据库推荐使用SQLite Expert(Personal),简单易用;(3)、SQLite Browser;

 

11、EditText和ScrollView 滚动冲突

  11.1、完美解决EditText和ScrollView的滚动冲突(上) - jhcelue - 博客园.html(https://www.cnblogs.com/jhcelue/p/7121965.html

    ZC:这个方式 并不正确,∵ 尝试下来没效果,基本代码:

public class MainActivity extends Activity implements View.OnTouchListener
{
    ... ...

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent)
    {
        //触摸的是EditText而且当前EditText能够滚动则将事件交给EditText处理。否则将事件交由其父类处理
        if ( view.getId() == R.id.edtMsg_config )
        {
            view.getParent().requestDisallowInterceptTouchEvent(true);
         // ZC: 相当于把手 从屏幕上移开(类似Winodws的鼠标放开事件)
            if (motionEvent.getAction() == MotionEvent.ACTION_UP)
                view.getParent().requestDisallowInterceptTouchEvent(false);
        }
        return false;
    }
}

 

  11.2、详解Android ScrollView嵌套EditText出现的滑动问题_Android_脚本之家.html(https://www.jb51.net/article/132092.htm

    ZC:该方式尝试下来,有效:(对 EditText进行设置,而不要对Activity进行设置)

        FedtMsg_config.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                // 解决scrollView中嵌套EditText导致不能上下滑动的问题
                v.getParent().requestDisallowInterceptTouchEvent(true);
                switch (event.getAction() & MotionEvent.ACTION_MASK)
                {
                // ZC: 相当于把手 从屏幕上移开(类似Winodws的鼠标放开事件)
                case MotionEvent.ACTION_UP:
                    v.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
                }
                return false;
            }
        });

 

12、Adaptor

  12.1、SimpleAdapter真不简单! - 文酱 - 博客园.html(https://www.cnblogs.com/wenjiang/p/3189082.html

要构造一个SimpleAdapter,需要以下的参数:
 1.Context context:上下文,这个是每个组件都需要的,它指明了SimpleAdapter关联的View的运行环境,也就是我们当前的Activity。
 2.List<? extends Map<String, ?>> data:这是一个由Map组成的List,在该List中的每个条目对应ListView的一行,每一个Map中包含的就是所有在from参数中指定的key。
 3.int resource:定义列表项的布局文件的资源ID,该资源文件至少应该包含在to参数中定义的ID。
 4.String[] from:将被添加到Map映射上的key。
 5.int[] to:将绑定数据的视图的ID跟from参数对应,这些被绑定的视图元素应该全是TextView。
 从这里我们可以看到,要想使用ListView,我们应用程序的主界面必须包含ListView,然后ListView的内容可以自己定义,而不仅仅是TextView。
 要想知道这是什么回事,我们就要知道SimpleAdapter是如何绑定数据到视图的,这个过程我们甚至可以自定义:

 

  12.2、8.SQLite分页读取 - 天朝程序猿的专栏 - CSDN博客.html(https://blog.csdn.net/jabony/article/details/9203623

  12.3、9.SQLite分页表格 - 天朝程序猿的专栏 - CSDN博客.html(https://blog.csdn.net/jabony/article/details/9203635

 

13、用Activity的onTouchEvent方法实现监听手指上下左右滑动 - 冰河世纪第二代 - CSDN博客.html(https://blog.csdn.net/qiantujava/article/details/9903891

    @Override
    public boolean onTouchEvent(MotionEvent _event)
    {
        //继承了Activity的onTouchEvent方法,直接监听点击事件
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            //当手指按下的时候
            x1 = event.getX();
            y1 = event.getY();
        }
        if(event.getAction() == MotionEvent.ACTION_UP) {
            //当手指离开的时候
            x2 = event.getX();
            y2 = event.getY();
            if(y1 - y2 > 50) {
                Toast.makeText(MainActivity.this, "向上滑", Toast.LENGTH_SHORT).show();
            } else if(y2 - y1 > 50) {
                Toast.makeText(MainActivity.this, "向下滑", Toast.LENGTH_SHORT).show();
            } else if(x1 - x2 > 50) {
                Toast.makeText(MainActivity.this, "向左滑", Toast.LENGTH_SHORT).show();
            } else if(x2 - x1 > 50) {
                Toast.makeText(MainActivity.this, "向右滑", Toast.LENGTH_SHORT).show();
            }
        }
        return super.onTouchEvent(event);
    }

  ZC:

    double[] FtouchXs = {0,0.25, 0,0.25, 0.75,1, 0,0.25, 0.75,1};
    double[] FtouchYs = {0.75,1, 0,0.25, 0.75,1, 0.75,1, 0,0.25};
    int FtouchIdx = 0;
    
    void Create_Welcome()
    {
        ImageView imageview_welcome = (ImageView) this.findViewById(R.id.imageview_welcome);
        imageview_welcome.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View _v, MotionEvent _event)
            {
                int iW = _v.getWidth();
                int iH = _v.getHeight();
                if(_event.getAction() == MotionEvent.ACTION_DOWN)
                {
                    //当手指按下的时候
                    float x = _event.getX();
                    float y = _event.getY();
                    
                    FtouchIdx = 0;
                    if (       (iW*FtouchXs[0] <= x)&&(x <= iW*FtouchXs[1])
                            && (iH*FtouchYs[0] <= y)&&(y <= iH*FtouchYs[1]) )
                    {
                        Log.e("ACTION_DOWN", x+","+y);
                        FtouchIdx = 1;
                    }
                }
                else if(_event.getAction() == MotionEvent.ACTION_MOVE)
                {
                    if ( (FtouchIdx == 1)||(FtouchIdx == 2)
                            ||(FtouchIdx == 3)||(FtouchIdx == 4) )
                    {
                        float x = _event.getX();
                        float y = _event.getY();
                        if (       (iW*FtouchXs[FtouchIdx*2] <= x)&&(x <= iW*FtouchXs[FtouchIdx*2+1])
                                && (iH*FtouchYs[FtouchIdx*2] <= y)&&(y <= iH*FtouchYs[FtouchIdx*2+1]) )
                        {
                            Log.e("ACTION_MOVE", x+","+y);
                            FtouchIdx ++;
                        }
                    }
                }
                else if(_event.getAction() == MotionEvent.ACTION_UP)
                {
                    //当手指离开的时候
//                    float x = _event.getX();
//                    float y = _event.getY();
                    
                    if (FtouchIdx == 5)
                    {
                        Log.e("ACTION_UP", "ACTION_UP");
                        Fvf01.setDisplayedChild(LY_IDX_CONFIG);
                    }
                }
                return false;
            }
        });

    ... ...
    }

14、Android按返回键退出应用时弹出对话框 - renwudao24的专栏 - CSDN博客.html(https://blog.csdn.net/renwudao24/article/details/44537835

  ZC:Override了onKeyDown之后,在函数里 不管返回true还是false,按 手机的回退键 都无法退出app了...

  ZC:解决:Android onKeyDown监听返回键无效 - 星辰之力 - 博客园.html(https://www.cnblogs.com/zhujiabin/p/5918850.html):Override  onBackPressed:

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

 

15、baidu搜 “Android 串口 设置 停止位”

  15.1、Android 串口设置校验位、速率、停止位等参数 - Cfan1236 - 博客园.html(https://www.cnblogs.com/rui1236/p/5988074.html) ZC:主看

  15.2、Android 串口开发 支持N-8-1(数据位停止位校验方式) 设定 - sliencefun的博客 - CSDN博客.html(https://blog.csdn.net/sliencefun/article/details/79714591

  ZC:其实如果 使用 自己弄 NDK来变异使用JNI的话,都可以使用 串口的异步模式了,但是 我对此 不太了解 以后在说...

16、baidu搜 “Android jni exlipse”

  16.1、Android Eclipse JNI开发示例 - chenjinlong126的博客 - CSDN博客.html(https://blog.csdn.net/chenjinlong126/article/details/78075143

  16.2、Android Studio开发JNI示例 - wzhseu的博客 - CSDN博客.html(https://blog.csdn.net/wzhseu/article/details/79683045

17、baidu搜 “串口编程 232 485”

  UART和RS232_RS485的关系,RS232与RS485编程 - DoubleLi - 博客园.html(https://www.cnblogs.com/lidabo/p/6307293.html

18、CRC modbus

 18.1、baidu搜"CRC校验 java"

  (1)、Java Modbus CRC16校验 - koneloong - 博客园.html(https://www.cnblogs.com/koneloong/p/5218136.html

    ZC:代码 短小精悍。看到别的文章里面都是大段的代码,感觉有点虚,但是计算出来的结果确实是OK的...

  (2)、JAVA CRC16校验工具 - xialong_927的博客 - CSDN博客.html(https://blog.csdn.net/xialong_927/article/details/80538127

    ZC:貌似 计算出来的结果有点不对啊... 高位byte 和 低位byte 是反的...

  (3)、Java CRC16 校验代码 和 与之对应的C代码 - zhp的博客 - CSDN博客.html(https://blog.csdn.net/zhouhuiping007/article/details/78341329

    ZC:这个和上面 貌似 有点像,未仔细看...

 18.2、baidu搜"CRC校验 在线"

  (1)、On-line CRC calculation and free library.html(https://www.lammertbies.nl/comm/info/crc-calculation.html

 

19、Android获取Mac地址-适配所有版本 - chaozhung的专栏 - CSDN博客.html(https://blog.csdn.net/chaozhung_no_l/article/details/78329371

20、对话框

 20.1、Android,对话框定时自动关闭的实现 - 技术荆棘路 - CSDN博客.html(https://blog.csdn.net/gavinming/article/details/6120051

 20.2、Android延迟自动关闭Dialog - 风轻云喏的专栏 - CSDN博客.html(https://blog.csdn.net/a550508153/article/details/50344623

 20.3、Android开发必知--几种不同对话框的实现 - codingblock - 博客园.html(https://www.cnblogs.com/codingblock/p/4721597.html

 20.4、AlertDialog、Dialog点击空白区域取消和不取消 - Thoms_L的博客 - CSDN博客.html(https://blog.csdn.net/Thoms_L/article/details/68064905

 

21、MD5 (仅供参考)

  21.1、MD5加密的简单java实现 - liu1782291245的博客 - CSDN博客.html(https://blog.csdn.net/liu1782291245/article/details/73467266

  21.2、标准JAVA MD5方法 - wangfei0904306的博客 - CSDN博客.html(https://blog.csdn.net/wangfei0904306/article/details/71565968

22、

  1. runOnUiThread(new Runnable(){  
  2.   
  3.                     @Override  
  4.                     public void run() {  
  5.                         //更新UI  
  6.                         imageView.setImageBitmap(bitmap);  
  7.                     }  
  8.                       
  9.                 });  

 

23、百度 搜索 “android 4.4 打开 移动流量”

  Android 打开关闭GPRS数据流量 - 筱丶新的博客 - CSDN博客.html(https://blog.csdn.net/qq_26981913/article/details/52314482

  android系统后台打开关闭4G网络-CSDN论坛.html(https://bbs.csdn.net/topics/391944690

  实现开启和关闭android移动网络 - fangzhibin4712的专栏 - CSDN博客.html(https://blog.csdn.net/fangzhibin4712/article/details/26563285/

  android 如何实现移动数据上网的开关?-CSDN问答.html(https://ask.csdn.net/questions/152

 

50、遗留问题:

  11.1、串口 关闭后,接收信息的线程不会退出 其实此时 串口可能并未真正关闭 要等到串口再次接收到消息的时候 才会真正的关闭 线程也在此时退出

51、

 

posted @ 2018-10-17 21:49  codeskill_android  阅读(263)  评论(0编辑  收藏  举报