android

HttpClient 和 HttpURLConnection

现在已经不推荐使用HttpClient了,从Android Level 23(Android 6.0)开始,已经强制使用HttpURLConnection了,著名的第三方库AsynHttpClient用的就是HttpClient,虽然提供了一个可以在6.0上使用HttpClient的包,但是已经不再维护了。 现在大家用的比较多的就是Okhttp、Volley、Retrofit,选择哪个全看你自己的需求,但是我理解都是需要再封装一下才能比较方便地使用。 下面说一下HttpURLConnection吧 所有的网络请求,是不允许在主线程中的,因为可能会阻塞主线程,造成ANR,所以网络请求都要这样使用: new Thread(new Runnable(){ //具体的http请求代码 }); setRequestMethod设置请求方式GET或POST setConnectTimeout设置连接建立的超时时间 setReadTimeout设置请求的超时时间 setDoOutput默认为false,

  • Nemo
    Nemo
1 min read
android

Android二维码扫描库

之前在github上找了一个对zxing简化过的二维码扫描库,运行它的demo的时候挺好,放到我自己的工程里面就各种不对劲,比如说扫描效率很差、角度刁钻等。当时也没多想,换了另外一个zbar库还是这样!!!好吧,问题出在我自己的代码里面。 花点儿时间看了源码,原来问题是这样出现的: Demo里的扫描界面 demo里的扫描界面是如下图这样的,有系统的状态栏,然后中间是一个方形的扫描区域。 我工程里的扫描界面 我把库拿来用的时候,对扫描界面进行了改动,加上了标题栏,而且使用的是Linearlayout 致使扫描框往下了一点,移动的高度也就是标题栏的高度。我就猜会不会是这个问题,找到源码来看一看 果然!计算截图区域的时候,左上角顶点的Y坐标是int y = cropTop * cameraHeight / containerHeight;再看一下里面用到的cropTop是什么,是int

  • Nemo
    Nemo
2 min read
android

Android 6.0 上的wifi问题

首先要说一下使用Android studio的时候的几个配置 compileSdkVersion告诉Gradle用哪个Android SDK版本编译你的应用。使用任何新添加的API就需要使用对应level的android SDK。 compileSdkVersion不会改变运行时的行为,最好是使用最新的SDK进行编译,这样可以避免使用启用的API,并且为使用新的API做好准备。 minSdkVersion即应用可以运行额最低要求。 targetSdkVersion它是android提供向前兼容的主要依据,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。targetSdkVersion是在程序运行时起作用。 Android M上wifi相关的问题 以前只在安装的时候有权限的声明,用户不同意的话就不能安装。在6.0上有了新的权限系统,你可以在安装之后再去关闭它。 看一下官方文档,里面对于wifi的说法是这样的 你只能修改你自己的应用创建的wifiConfiguration,不能修改或者删除有系统创建的wifiConfiguration。(也就是如果是由用户在“设置”里面手动配置的wifiConfiguration,那么其他app不能修改或删除它。

  • Nemo
    Nemo
3 min read
android

Button in Android L

在android L及以上,使用button的时候,差点掉进一个坑里。 起因: 想要点击图片之后执行相应的操作,就类似于点击了按钮一样。 做法: 在布局文件里面定义一个FrameLayout,然后底层是Button,上面是ImageView,这两个的大小都match_parent。这样很简单就能够实现点击了图片就类似于点击了按钮一样可以执行某些操作。 问题: 在android 4.x及以下都没有问题,但是android 5.x就出问题了。问题表现为图片不显示!!!!,但该块区域能点,并且能正确执行某些操作。 只是图片不显示,这可愁死我了!::>_<:: 定位问题的过程: 1.先去google以下有没有人也遇到类似的问题,发现这位同学也遇到了这个问题,而且他的博客还标注了【

  • Nemo
    Nemo
3 min read
android

如何在android里面支持portal wifi

之前写过在Android上判断是否有可用的网络(流量或者wifi),这基本上都够用了。但是有一种portal wifi,虽然判定是可用的,且ping也是能ping通的,但是就是上不了网,因为wifi需要输入动态验证码。在火车站、汽车站、商场之类的地方,portal wifi比较常见。 如果app里面需要处理这种情况,那么可以根据网络请求的返回值来判断,基本上statusCode是300+的都是重定向,一般是重定向到portal wifi的获取验证码页面。 private void isWifiSetPortal() { // 商定的请求链接 final String mWalledGardenUrl = "xxxx"; // 设置请求超时 final int

  • Nemo
    Nemo
2 min read
android

Android判断网络是否可用

Android里面有ConnectivityManager可以判断当前的网络状态。 判断是否有可用的网络 如果你只是想判断当前是不是有可用的网络(不在乎wifi或者流量的话),可以使用如下代码 /** * 是否已经连接网络(外网不一定通) * @return */ public boolean isNetConnected() { if (connectivityManager != null){ Log.d(LOGLABEL, "connectivitymanager is not null"); //获取代表联网对象的NetworkInfo对象 NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null &&

  • Nemo
    Nemo
3 min read
android

Android标题栏、状态栏

ActionBar vs ToolBar ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar,具有可定制性、灵活性、Material Design风格等优点。官方考虑到仍有一部分用户的手机版本号低于5.0,所以,ToolBar也放进了support v7包内,使得低版本的系统也能使用上ToolBar。 使用Android Studio新创建一个项目的话,默认MainActivity是使用的Toolbar,看一下MainActivity的布局文件 看一下manifest里面对MainActivity的声明 MainActivity声明自己的theme是NoActionBar,表示是没有标题栏,而布局文件中又有ToolBar,toolbar就起到了标题栏的作用。 在onCreate的时候设置如下代码,就可以把ActionBar上的所有操作都转移到ToolBar上。 Toolbar toolbar = (Toolbar) findViewById(R.id.

  • Nemo
    Nemo
19 min read
android

让Android状态栏透明

android 4.4 (KITKAT)之后,Android Window支持了一些新属性,其中两个属性是 WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION 即让状态栏和标题栏透明。试试这两个属性。 1.创建工程的时候选择NavigationView模板 2.使用android studio自动生成的代码,在真机上运行起来是这样的 看到main.xml的布局是DrawerLayout + NavigationView <?xml version="

  • Nemo
    Nemo
7 min read
android

Android LaunchMode

页面跳转的时候,假如说之前已经有这个页面了,再次生成这个页面好像有点傻傻的,为什么不直接用前面已经生成的那个页面呢。这就要说到activity的启动模式。 android四种launchMode AndroidManifest里设计了四种启动模式,分别是: standard singleTop singleTask singleInstance standard 标准模式 默认的启动模式,如果不在Manifest.xml里面为某个activity指定android:launchMode,那个就默认是standard。这种模式下,每次都会创建新的实例。 这种模式下,谁启动了这个activity,那么这个Activity就运行在启动它的那个activity所在的栈中。 以Demo来举例,假如说有A,B,C三个Activity(其中A是MainActivity),顺序是A -> B

  • Nemo
    Nemo
18 min read