Android
xiaoliizi
这个作者很懒,什么都没留下…
展开
-
开新坑!Android学习-目录
刚买了一本新书还没到,现在先看着第一行代码,学习一下比较基础的东西。感觉安卓开发这方面是必备的啊,还是要多学,还要学精才行。 准备从三本书去学习,第一本是第一行代码,第二本 是打造高质量Android应用:Android开发必知的50个诀窍,第三本Android网络编程 第一行代码: 第二章 先从看得到的入手,探究活动 2.5 活动的启动模式 2.6 活动的最佳实践 第三原创 2016-02-25 21:27:23 · 749 阅读 · 0 评论 -
第一行代码-8.2 接收和发送短信
接收和发送短信也是通过调用Android提供的API实现的,所以我们自己也可以实现短信应用。 1、接收短信 当手机接收到一条信息的时候,系统会发送一条名为android.provider.Telephony.SMS_RECEIVED的广播,这条广播里 携带着与短信相关的所有数据。每个应用程序都可以在广播接收器里对它进行监听,收到广播时再从中解析出短信的内容即可。 首先新建SMSTes原创 2016-02-23 10:18:51 · 1293 阅读 · 5 评论 -
第一行代码-8.1 使用通知
1、通知的基本用法 先看看怎么创建一个通知事件。// NotificationTest-MainActivity.javaprivate Button mBSendNotify;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);原创 2016-02-22 21:54:42 · 1348 阅读 · 0 评论 -
Hack3 - 创建定制的ViewGroup
现在如果要我们设计这样的布局: 有人会说,用RelativeLayout,然后指定每一个View的margin值。这种方法实现的代码如下:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" andro原创 2016-03-08 10:31:00 · 101 阅读 · 0 评论 -
Hack2 使用延迟加载以及避免代码重复
1、使用<include />标签避免代码重复 比如在我们的工程中,要经常用到一个TestView,那么可以把TextView的布局代码单独写入一个文件中,然后在其他布局中引用它就可以了。<!-- footer_with_layout_properties.xml --><?xml version="1.0" encoding="utf-8"?><TextView xmlns:androi原创 2016-03-07 22:54:27 · 377 阅读 · 0 评论 -
第一行代码-7.3 创建自己的内容提供器
之前我们为了实现SQLite的功能,需要创建自己的DatabaseHelper类,现在我们也可以定义自己的ContentProvider来实现跨应用访问数据。但是六个方法都要重写。 由于整个MyProvider的实现比较复杂,所以先看代码再解释。在DatabaseTest中创建DatabaseProvider类,注意要把Toast去除掉,因为跨程序访问的时候不能使用Toast。// Datab原创 2016-02-22 16:00:41 · 996 阅读 · 0 评论 -
第一行代码-7.2 访问其他程序中的数据
1、ContentResolver的用法 这个和前面学习的SQLiteDatabase的用法特别相似。思路都是一样的,只是一些参数上面的不同。 (1)getContentResolver()和Uri 在学习SQLite的时候,如果我们需要进行CRUD操作,就要通过databasehelper.getWritableDatabase或者getReadableDatabase。与之对应的是原创 2016-02-22 15:12:41 · 544 阅读 · 0 评论 -
第一行代码-7.1 内容提供器简介
上一章中学习了Android的持久化存储技术,它存储的数据具有一定的安全性,因为只有本程序可以使用,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE这两种方式在Android4.2之后都被废弃了。所以只能通过其他方式共享数据。 共享数据的目的是什么?一些数据确实只能本程序访问,比如账号和密码,因为涉及到隐私安全。但另一些数据是可以共享的,比如通讯录,在QQ和微信原创 2016-02-22 12:50:39 · 492 阅读 · 0 评论 -
第一行代码-6.5 SQLite数据库的最佳实践
1、事务使用 首先说明一下SQLite支持的技术:事务的作用。比如银行,现在我要转账给别人,那么有两个过程:自己账户扣钱、对方账户加钱。如果这两步是分开执行的,而且中间出现错误,就会导致自己的钱凭空消失。所以这两步必须同时执行才能保证安全性。 现在在DatabaseTest上测试事务的使用:比如现在数据库的内容太旧了,需要换成新的,就需要执行delete和insert操作,而且要同时原创 2016-02-22 10:51:29 · 563 阅读 · 0 评论 -
第一行代码-6.4 SQLite数据库存储
前面一章学习到了SharedPreferences,它可以存储不同类型的键值对。比如,存储一个用户的账号和密码。但是,如果这个应用被要求可以记住多个用户的密码怎么办?这个时候SharedPreferences就很难做到了,而使用安卓内置的SQLite轻量级数据库就可以很轻松做到。 1、创建数据库// DatabaseTest.java MainActivity.javaprivate Butto原创 2016-02-20 22:46:06 · 506 阅读 · 0 评论 -
第一行代码-8.3 调用摄像头和相册
1、调用摄像头拍照 首先我们来实现拍照,然后把这张相片显示出来的应用。新建ChoosePicTest项目,然后修改布局如下:<!-- activity_main.xml --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pare原创 2016-02-23 15:40:30 · 4052 阅读 · 6 评论 -
第一行代码-8.4 播放多媒体文件
1、播放音频 播放音乐可以通过MediaPlayer实现,下面说明一下MediaPlayer的一些常用的类。 方法名 功能描述 setDataSource()设置要播放的音频文件的位置prepare()在开始播放之前调用这个方法完成准备工作start()开始或继续播放音频pause()暂停播放音频reset()将MediaPlayer 对象重置到刚刚创建的状态seek原创 2016-02-23 18:50:02 · 2366 阅读 · 5 评论 -
第一行代码-10.3 解析XML数据格式
准备工作:首先开启wamp server,然后在wamp/www目录下新建get_data.xml文件,并写入以下内容:<apps><app><id>1</id><name>Google Maps</name><version>1.0</version></app><app><id>2</id><name>Chrome</name><version>2.1</version></原创 2016-02-29 22:58:52 · 1982 阅读 · 1 评论 -
第一行代码-10.2 使用HTTP协议访问网络
其实我们访问网络都是两个过程:发送请求到服务器,然后从服务器接收返回的数据。当然本地还有解析这个数据的过程。比如我们访问百度的主页,首先发送一个请求到百度的服务器,然后百度把网站的HTML代码发给客户端,最后客户端将代码解析出来,显示出我们看到的页面。 1、使用HttpURLConnection 概念性的东西我就不多说了,直接看代码吧。首先新建工程NetworkTest,然后设置布局:<Li原创 2016-02-29 22:21:21 · 2496 阅读 · 11 评论 -
第一行代码-10.1 WebView的用法
如何不打开浏览器而在自己的应用中打开网页?<!-- WebViewTest - activity_main.xml --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="mat原创 2016-02-27 23:20:12 · 811 阅读 · 0 评论 -
第一行代码-9.6 服务的最佳实践--后台执行的定时任务
首先说明一下Android实现定时任务的方法,这里用第一行代码的原话来讲。 Android 中的定时任务一般有两种实现方式,一种是使用Java API 里提供的Timer 类,一种是使用Android 的Alarm 机制。这两种方式在多数情况下都能实现类似的效果,但Timer有一个明显的短板,它并不太适用于那些需要长期在后台运行的定时任务。我们都知道,为了能让电池更加耐用,每种手机都会有自己的原创 2016-02-27 11:58:04 · 981 阅读 · 0 评论 -
第一行代码-9.5 服务的更多技巧
1、使用前台服务 使用一般的服务依然有被系统回收的可能,因为优先级还比较低,前台服务则可以保持运行状态,不会因为系统内存不够而被回收。它和一般的服务最大的区别在于它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。比如360、墨迹天气等。 // MyService.java - 修改的内容@Override public voi原创 2016-02-27 10:41:56 · 453 阅读 · 0 评论 -
第一行代码-9.4 服务的生命周期
之前章节我们学习过了活动以及碎片的生命周期。类似地,服务也有自己的生命周期,前面我们使用到的onCreate()、onStartCommand()、onBind()和onDestroy()等方法都是在服务的生命周期内可能回调的方法。 一旦在项目的任何位置调用了Context 的startService()方法,相应的服务就会启动起来,并回调onStartCommand()方法。如果这个服务之前原创 2016-02-27 10:34:46 · 514 阅读 · 0 评论 -
第一行代码-9.3 服务的基本用法
1、定义一个服务 首先创建,然后注册// ServiceTest - Service.javapublic class MyService extends Service{ @Override public IBinder onBind(Intent arg0) { return null; } // 服务创建的时候使用 @Override原创 2016-02-25 22:45:15 · 485 阅读 · 0 评论 -
第一行代码-9.2 Android 多线程编程
在这本书里首先介绍了怎么开启线程,方式和java是一样的。然后说明了在子线程中更新UI是不允许的,必须通过发送Message、用Handler接收来实现。 1、解析异步消息处理机制 由于整个过程比较复杂,所以我还是用第一行代码的原文进行解释: ①. Message Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。上一小节中我们使用到了M原创 2016-02-25 17:03:03 · 394 阅读 · 0 评论 -
其他零散学习-Android四大组件
参考网址:一个帖子学会Android开发四大组件 安卓四大组件包括活动(Activity)、服务(Service)、广播(Broadcast)和内容提供者(Content Provider)。下面开始一一学习。 (1)活动的生命周期 Android的活动周期可以用下面的图表示: 对这幅图的具体的理解我们还要从下面三种情况出发: ①、当一个活动被创建:onCreate原创 2016-02-23 22:29:30 · 336 阅读 · 0 评论 -
打造高质量Android应用-Hack1 使用weight 属性实现视图的居中显示
问题:如果要实现下图的效果:一个按钮在布局中占一半的宽度,而且不管手机的分辨率是多少都要这样,该怎么办? 提示:使用weightsum和weight实现 关键点:首先整个布局如果是LinearLayout,那么orientation一定要是horizontal,这样宽度的调整才能有效。其次LinearLayout的weightsum和button的weight的大小关系,这个不用原创 2016-02-18 11:12:01 · 470 阅读 · 0 评论 -
第一行代码-6.3 SharedPreferences存储
SharedPreferences存储的两大特点是:存储形式是键值对、存储类型多样。下面通过例子说明: 1、从SharedPreferences中存储数据和读取数据// MainActivity.javaprivate Button mButton_store;private Button mButton_get;@Overrideprotected void onCreate(Bundle原创 2016-02-18 10:23:10 · 396 阅读 · 0 评论 -
第一行代码-6.2 文件存储
文件存储是安卓三种持久化技术(包括文件存储、SharedPreferences存储和数据库存储)的其中一种,也是最直接最简单的一种,下面来看看它是怎么实现的: 1、将数据存储到文件中 下面通过一个例子,说明一下openFileOutput的用法,以及一些注意事项。// MainActivity.java -> public class MainActivityprivate EditTex原创 2016-02-17 17:50:39 · 465 阅读 · 0 评论 -
第一行代码-13.1 全局获取Context的技巧
背景:之前我们学习了网络编程,然后把代码封装到一个类里面,如果想要在那个类里面获取context用于Toast提示,是比较困难的事情。我们需要修改HttpUtil的函数的参数,在调用函数的时候把context传进去。虽然是一个可行的方案,但是这个把责任转移到了调用方,首先调用方能不能获取context是一个问题,其次这也让这个函数变得复杂。所以我们需要想办法让HttpUtil可以通过全局的函数来获取原创 2016-03-02 22:59:13 · 505 阅读 · 0 评论 -
第一行代码-11.1 找到自己的位置
在Android中,要想获取自己的位置,通过LocationManager就可以实现了,下面介绍它的用法,还是先通过代码来了解:private TextView mTVPosition;private LocationManager locationManager;private String provider;@Overrideprotected void onCreate(Bundle sav原创 2016-03-02 18:04:32 · 1228 阅读 · 0 评论 -
第一行代码-5.5 广播的最佳实践 实现强制下线功能
1、管理活动类:ActivityCollectorpublic class ActivityCollector { private static List<Activity> activities = new ArrayList<Activity>(); public static void addActivity(Activity activity) { activit原创 2016-02-13 18:22:44 · 2184 阅读 · 6 评论 -
第一行代码-5.4 使用本地广播
使用前面所说的广播的范围是全局的,一个应用程序发送的广播可能被其他程序截获,所以Android还定义了另一种广播:本地广播,只能被本程序接收的广播。实现起来也不难,用LocalBroadcastManager就行了。private IntentFilter filter; private LocalBroadcastManager localBroadcastManager; pri原创 2016-02-13 17:53:54 · 660 阅读 · 0 评论 -
第一行代码-10.5 网络编程的最佳实践
这里涉及到两个问题:首先是网络连接的代码比较长,所以可以把它封装在一个类里面,然后设置一个静态的方法,每次要进行网络连接的时候调用它就可以了;还有一个问题是由于网络连接需要开启子线程,然而子线程又不能返回数据,所以需要设置回调函数。 这里首先创建一个接口,意思就是回调函数:public interface HttpCallbackListener { void finish(String原创 2016-03-01 15:54:13 · 769 阅读 · 0 评论 -
第一行代码-5.3 发送自定义广播
1、发送标准广播 这里实现的就是自定义广播接收器、静态注册广播以及发送广播// MainActivity.javaprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);原创 2016-02-12 11:42:46 · 1834 阅读 · 0 评论 -
第一行代码-5.2 接收系统广播
1、动态注册监听网络变化 下面这个例子是通过动态注册网络状态监听器,来实现当网络转台变化时,显示吐司提醒用户。代码也比较简单:private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bu原创 2016-02-12 11:08:59 · 690 阅读 · 0 评论 -
第一行代码-10.4 解析JSON格式数据
和XML相比,JSON的优势在于体积小,网络上传输的时候更省流量,但是缺点在于语义性较差,看起来不如XML直观。 准备工作:创建get_data.json,然后输入内容:[{"id":"5","version":"5.5","name":"Angry Birds"},{"id":"6","version":"7.0","name":"Clash of Clans"},{"id":"7","原创 2016-03-01 11:35:37 · 933 阅读 · 0 评论 -
第一行代码-3.7 编写界面的最佳实践
现在要编写一个界面比较复杂和美观的聊天界面,先创建一个名为UIBestPractice的项目。 1、制作Nine-Patch图片 假设现在有一张图片名为message_left.png,现在作为LinearLayout的背景图片,如果这个layout的宽度设置为match_parent,那么整个图片就会被拉伸,导致效果不好:<LinearLayout android:layout_width原创 2016-02-05 21:26:13 · 2174 阅读 · 1 评论 -
第一行代码-13.2 使用Intent传递对象
使用Intent传递一般类型的数据比较简单,只要通过intent.putExtra(key, value)就可以实现,但是怎么传递自定义类型的数据,就需要使用一些技巧了。 1、Serializable方式 Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现原创 2016-03-03 00:05:56 · 359 阅读 · 0 评论 -
第一行代码2.6-活动的最佳实践
1、知晓当前是哪一个活动 也就是让每一个活动启动的时候,都打印出活动名。代码如下:Log.d(tag, getClass().getSimpleName()); 一种方法就是在每一个活动都添加这行代码,还有一种方法是定义BaseActivity,在这个基类中执行这行代码,再让其他所有的活动都继承这个类。 效果如下: 2、随时随地退出程序 通过之前2.5的例子我们知道如果一个原创 2016-02-02 18:36:21 · 864 阅读 · 0 评论 -
Android网络编程-1.4 网络应用实战案例
1、加载一个页面 新建工程,然后在MainActivity.java中添加下面的代码:mButton = (Button) findViewById(R.id.openInternet);mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0)原创 2016-02-05 00:30:15 · 651 阅读 · 0 评论 -
第一行代码3.5-最常用和最难用的控件--ListView
首先这个控件为什么是最常用的呢?因为手机屏幕大小有限,有些东西比如新闻、手机联系人微博等大量数据不可能全部显示出来,需要通过滑动手机屏幕翻阅信息。这种方法用到的控件就是ListView 1、ListView的简单用法 首先创建一个工程名为ListViewTest,然后在activity_main.xml中添加如下代码: 然后在MainActivity.java中添加: 其原创 2016-02-04 15:31:54 · 882 阅读 · 1 评论 -
第一行代码-13.5 编写测试用例
1、必要性 当编写大程序的时候,往往不是一个人完成的,而是一个团队共同编写程序。有的时候你修改了一段代码,修复了自己负责的部分的bug,但是可能导致其他部分增加了新的bug。所以如果有测试用例供整个团队在修改代码的过程中进行调试,就可以更方便地避免这种问题。 2、创建测试工程 选择BroadcastBestTest工程作为调试对象。首先点击File -> New -> Other,然后原创 2016-03-03 21:39:07 · 686 阅读 · 0 评论 -
第一行代码3.2-创建自定义控件
1、引入布局 首先创建一个LinearLayout布局,包括两个按钮、一个TextView,模仿一些软件的标题栏的风格。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="原创 2016-02-03 23:26:57 · 2005 阅读 · 0 评论 -
第一行代码3.3-详解四种基本布局
1、LinearLayout 下面介绍LinearLayout的几个基本属性: 1.1 layout_gravity 前面介绍了gravity的属性是控制控件内文字的对齐方式,layout_gravity则指定了该控件相对于父控件的对齐方式。和orientation一样,它也分垂直和水平方向。但是,垂直方向的对齐只有在orientation为horizontal的时候才生效,因为在水平方向原创 2016-02-03 11:31:56 · 516 阅读 · 0 评论