`
handonghandong
  • 浏览: 89051 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android开发简单实例(第二篇)

阅读更多

Notepad运行示例:

Android环境搭配好后,继续昨天的简单运用后,今天运行一个Notepad实例,在加之对Android的一些理解。
1。 在运行一个Android实例后,可以看到后台的日志:
    Android Launch!
   adb is running normally.
   Performing com.mydream.NotesList activity launch
   Launching a new emulator with Virtual Device 'androidStudy'
   New emulator found: emulator-5554
   Waiting for HOME ('android.process.acore') to be launched...
   HOME is up on device 'emulator-5554'
   Uploading AndroidNotepad.apk onto device 'emulator-5554'
   Installing AndroidNotepad.apk...
   Success!
   Starting activity com.mydream.NotesList on device
   ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mydream/.NotesList }
开启了一个Android的一个活动NoteList。
2。 在AndroidManifest.xml文件中声明了很多Activity,其中有个就是NotesList,在这个节点下有个<intent-filter>的子节点:
       <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
其中Action的名字为MAIN,这代表程序的入口点,系统找到后就会创建一个Activity运行,否则不会运行。Notelist主要是显示日志列表,这些日志数据都存放在Sqlite数据库中,在NotesList的Java文件中有两个私有数据:
private static final String[] PROJECTION = new String[] {
            Notes._ID, // 0 "_id"
            Notes.TITLE, // 1 "title"
    }
0代表id字段,1代表title字段。
private static final int COLUMN_INDEX_TITLE = 1;
代表了title的索引。
之后进入的方法是onCreate,因为NotesList这个activity是系统调用的,此时的intent是不带数据和操作类型的,系统只是在其中指明了目标组件是Notelist,所以这里把”content:// com.google.provider.NotePad/notes”保存到intent里面,这个URI地址指明了数据库中的数据表名(参见以后的NotePadProvider类),也就是保存日志的数据表notes。
1 setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);设置按键处理快捷方式。
2 getListView().setOnCreateContextMenuListener(this);ListView注册 createContextMenu监听器。 
3 Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null,
                Notes.DEFAULT_SORT_ORDER);执行一个查询,返回一个光标结果。这里第一个参数就是上面设置的” content:// com.google.provider.NotePad/notes”这个URI,即notes数据表。PROJECTION 字段指明了结果中所需要的字段,Notes.DEFAULT_SORT_ORDER 指明了结果的排序规则。实际上managedQuery并没有直接去查询数据库,而是通过Content Provider来完成实际的数据库操作,这样就实现了逻辑层和数据库层的分离。
4 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.noteslist_item, cursor,
                new String[] { Notes.TITLE }, new int[] { android.R.id.text1 });
        setListAdapter(adapter);
查询出日志列表后,构造一个CursorAdapter,并将其作为List View的数据源,从而在界面上显示出日志列表。可以看到,第二个参数是R.layout.noteslist_item,打开对应的noteslist_item.xml文件。
4。 活动列表查询之后,处理单个日志的单击事件是onListItemClick方法,首先通过”content:// com.google.provider.NotePad/notes”和日志的id 号拼接得到选中日志的真正URI,然后创建一个新的Intent,其操作类型为Intent.ACTION_EDIT,数据域指出待编辑的日志URI。startActivity(new Intent(Intent.ACTION_EDIT, uri))执行后会发生什么事情呢?这时候Android系统就跳出来接管了,它会根据intent中的信息找到对应的activity,在这里找到的是NoteEditor这个activity,然后创建这个activity的实例并运行。那么,Android又是如何找到NoteEditor这个对应的activity的呢?这就是intent发挥作用的时刻了。
             new Intent(Intent.ACTION_EDIT, uri)
5。 Androidmanfest.xml中的provider:
<provider android:name="NotePadProvider"
            android:authorities="com.google.provider.NotePad"
        />
进入activity选择机制了:
系统从intent中获取道uri,得到了content://com.google.provider.NotePad/notes/1,去掉开始的content:标识,得到com.google.provider.NotePad/notes/1,然后获取前面的com.google.provider.NotePad,然后就到Androidmanfest.xml中找到authorities为com.google.provider.NotePad的provider,这个就是后面要讲的contentprovider,然后就加载这个content provider。
在这里是NotePadProvider,然后调用NotePadProvider的gettype函数,并把上述URI传给这个函数,函数返回URI所对应的类型(这里返回Notes.CONTENT_ITEM_TYPE,代表一条日志记录,而CONTENT_ITEM_TYPE = " vnd.android.cursor.item/vnd.google.note ")。
然后系统使用获得的" vnd.android.cursor.item/vnd.google.note "和”android.intent.action.EDIT”到androidmanfest.xml中去找匹配的activity.
正好NoteEditor这个activity的intent-filter满足上述条件,这样就找到了NoteEditor。于是系统加载这个类并实例化,运行,然后就到了NoteEditor的OnCreate函数中。
注:1 第一次启动模拟器会比较慢,但以后就别关闭模拟器了,修改代码,调试都不需要再次启动的,直接修改后run或debug就是。
    2 出现INSTALL_FAILED_CONFLICTING_PROVIDER
      mobileFinder]Please check logcat
      mobileFinder]Launch canceled!
    原因就是有在用Provider造成的,你换个别的名字就可以了。




  • 大小: 31.5 KB
0
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android开发实例大全源码第二部分

    "Android开发实例大全源码第二部分"提供了一系列的实例源码,涵盖了从实例80以后的项目,这些实例旨在帮助开发者深入理解和掌握Android应用开发的核心技术。以下是这些实例涉及的一些关键知识点: 1. **布局管理**...

    Android开发实例大全 王东华

    《Android开发实例大全》是王东华先生撰写的一本深入浅出的Android应用程序开发指南,旨在帮助开发者通过实例学习和掌握Android平台上的编程技术。这本书覆盖了从基础到高级的各种主题,包括用户界面设计、数据存储...

    Android开发实例大全 第2版.pdf

    《Android开发实例大全 第2版》是一本专为Android开发者准备的实践指南,全面涵盖了Android应用开发的各种核心技术和实战技巧。这本书旨在帮助读者通过实际案例深入理解Android平台的开发过程,提升开发技能。 首先...

    最详细的Android开发教程实例

    2. **Hello World程序**:通过创建第一个简单的"Hello, Android"应用程序,解释Android应用的基本结构,包括`AndroidManifest.xml`文件、主Activity类和布局文件。 3. **Activity和Intent**:讲解Activity作为用户...

    Android开发实例大全 第2版

    Android开发实例大全 第2版

    android 基础开发实例

    在Android基础开发实例中,我们将会探讨一系列关于Android应用程序开发的关键知识点。这本书的随书源码提供了丰富的实例,涵盖了从入门到进阶的各种主题,旨在帮助初学者建立扎实的Android开发基础。 首先,...

    Android开发实例大全源码第一部分

    "Android开发实例大全源码第一部分"提供了1-80个案例的源代码,这是一份宝贵的资源,可以帮助开发者深入理解Android应用开发的各种技术和实践。下面将针对这些标签和源代码文件,详细阐述Android开发中的重要知识点...

    android开发实例大全_王东华

    第2章 控件开发实例集锦 44 实例023: 显示在文本框中输入的信息 44 实例024: 使用RadioGroup控件实现选 项选择功能 46 实例025: 使用CheckBox控件实现同意 条款效果 48 实例026: 使用Spinner控件实现选项选择 ...

    Android编程典型实例与项目开发案例

    第2篇则通过对三个真实案例开发进行详细介绍,让读者很容易将第1篇的内容融会贯通,快速掌握Android平台下的商务软件、3D游戏及2D游戏的开发过程。同时在本书随书光盘的源代码中包含详尽的注释,以求尽量帮助读者...

    Android开发入门 实例 helloworld

    本文将深入探讨这个入门实例,带您逐步走进Android开发的世界。 首先,Android是Google主导的开源移动操作系统,主要应用于智能手机和平板电脑,但它也支持智能手表、电视、汽车等设备。Android开发主要使用Java或...

    android实例开发完全手册光盘

    这些实例可能还涵盖了其他的Android开发知识点,如BroadcastReceiver(广播接收者)用于监听系统事件,Fragment(碎片)在大型屏幕上的应用,Activity生命周期的理解,或者是如何进行性能优化。每个实例都可能包含...

    Android开发10个实例源码

    "Android开发10个实例源码"集合提供了一系列实用的项目源代码,帮助开发者深入理解Android应用的构建过程,同时也为学习新功能和优化技巧提供了丰富的资源。下面我们将详细探讨这些实例可能涵盖的知识点。 1. **...

    android开发实例大全王东华

    《Android开发实例大全》是王东华先生撰写的一本针对Android应用开发的实践性书籍,旨在帮助开发者通过实例深入理解Android平台的开发技术。这本书涵盖了众多Android开发的关键领域,包括但不限于用户界面设计、数据...

    Android实例开发完全手册

    #### 第2章 界面布局 - **2.1 使用线性布局(LinearLayout)** - **实例说明:** 使用LinearLayout来组织界面元素。 - **具体实现:** 创建一个包含多个子View的LinearLayout。 - **特别提醒:** LinearLayout是...

    Android开发实例大全(第2版) 中文【PDF】

    全书分为18章,分别讲解了UI布局实例集锦、控件实例集锦、自动化服务实例集锦、数据存储实例集锦、电话和短信实例集锦、图形图像实例集锦、和网络有关的实例集锦、多媒体实例集锦、Google地图实例集锦、Google API...

    Android编程典型实例与项目开发案例 光盘 源码

    总之,这份"Android编程典型实例与项目开发案例"光盘源码资源是学习和提升Android开发技能的宝贵资料,它提供了丰富的实践场景,帮助开发者将理论知识转化为实际动手能力,进一步推动个人在Android开发领域的专业...

    18个android开发实例

    2. **Hello World**:入门的第一个实例通常是创建一个简单的"Hello, World!"程序。这涉及到创建一个新的Android项目,定义布局文件(如activity_main.xml),并在MainActivity.java中编写显示“Hello, World!”的...

    Android小游戏实例

    【Android小游戏实例】是深入学习Android开发领域的一个重要实践环节,尤其对于初学者而言,它提供了将理论知识转化为实际操作的平台。在这个实例中,我们将主要关注如何在Android环境中创建和实现2D游戏,这也是大...

    android实例开发完全手册

    《Android实例开发完全手册》是一本深度探讨Android应用开发的实战型书籍,旨在通过丰富的实例帮助读者掌握Android开发的核心技术和实践技巧。这本书涵盖了从基础到高级的各个方面,为开发者提供了全面的学习路径。 ...

Global site tag (gtag.js) - Google Analytics