android中摘要怎么写在broadcastreceiver中访问数据库?构造函数的第一个参数应该摘要怎么写写?

android中的BroadcastReceiver.PendingResult怎么用的
[问题点数:20分,无满意结帖,结帖人nitibu]
android中的BroadcastReceiver.PendingResult怎么用的
[问题点数:20分,无满意结帖,结帖人nitibu]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。android怎么连接sqlite数据库?_百度知道
android怎么连接sqlite数据库?
Android是有自带的类库的:SQLiteOpenHelper,使用的时候继承这个类,然后写逻辑就可以,一般使用单例模式:public&synchronized&static&DBHelper&getDBHelper(Context&context)&{&if&(helper&==&null)&{&&helper&=&new&DBHelper(context);&}&return&}private&DBHelper(Context&context)&{&super(context,&&你自己的数据库名&,&null,&数据库版本);}使用的时候也很简单,下面是一个删除操作:public&synchronized&void&deleteSite(String&packname)&{&SQLiteDatabase&db&=&getWritableDatabase();&try&{&&db.beginTransaction();&&db.delete(&site&,&&packname=?&,&new&String[]&{&packname&});&&db.setTransactionSuccessful();&}&finally&{&&db.endTransaction();&&if&(db&!=&null)&{&&}&}}
其他类似问题
为您推荐:
SQLite介绍SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。在android中当需要操作SQLite数据库的时候需要得到一个SQLiteOpenHelper对象,而SQLiteOpenHelper是一个抽象类,用户需要继承这个类,并实现该类中的一些方法。1、继承SQLiteOpenHelper之后就拥有了以下两个方法:◆getReadableDatabase() 创建或者打开一个查询数据库◆getWritableDatabase()创建或者打开一个可写数据库◆他们都会返回SQLiteDatabase对象,用户通过得到的SQLiteDatabase对象进行后续操作2、同时用户还可以覆盖以下回调函数,再对数据库进行操作的时候回调以下方法:◆onCreate(SQLiteDatabase):在数据库第一次创建的时候会调用这个方法,一般我们在这个方法里边创建数据库表。◆onUpgrade(SQLiteDatabase,int,int):当数据库需要修改的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据库表,并建立新的数据库表,当然是否还需要做其他的操作,完全取决于应用程序的需求。◆onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。需要注意1、在SQLiteOepnHelper的子类当中,必须有以下该构造函数public&DatabaseHelper(Context&context,&String&name,&CursorFactory&factory,&&&&&int&version)&{&&&&//必须通过super调用父类当中的构造函数&&&&super(context,&name,&factory,&version);&&}为了方便,也可以创建其它的构造函数,含二个参数或者三个参数的。2、函数public void onCreate(SQLiteDatabase db)是在调用getReadableDatabase()或者是getWritableDatabase()第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法.public&void&onCreate(SQLiteDatabase&db)&{&&&&System.out.println(&create&a&Database&);&&&&//execSQL函数用于执行SQL语句&&&&db.execSQL(&create&table&user(id&int,name&varchar(20))&);&&}在向数据库的表中插入记录时,需要先将数据包含在一个ContentValues中,向该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致。接着调用Databasehelper的getWritableDatabase方法来获得可以写入的Databasehelper对象,再向其中insert记录。注意调用DatabaseHelper对象的insert,update或者query方法的参数的传递。另外执行query方法后,返回的是一个Cursor游标,游标最开始指向的是记录集合中第一行的上一行,因此首先需要先调用cursor.next()将游标移动到记录集合的第一行,接着再获取数据即可。Java代码&&&&public&class&SQLiteActivity&extends&Activity&{&&&&&&&&&/**&Called&when&the&activity&is&first&created.&*/&&&&&&&&&&private&Button&createB&&&&&&&&&&&private&Button&insertB&&&&&&&&&&&private&Button&updateB&&&&&&&&&&&private&Button&updateRecordB&&&&&&&&&&&&&private&Button&queryB&&&&&&&&&&&&@Override&&&&&&&&&&public&void&onCreate(Bundle&savedInstanceState)&{&&&&&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&&&&&&&setContentView(R.layout.main);&&&&&&&&&&&&&&&&&createButton&=&(Button)findViewById(R.id.createDatabase);&&&&&&&&&&&&&&updateButton&=&(Button)findViewById(R.id.updateDatabase);&&&&&&&&&&&&&&insertButton&=&(Button)findViewById(R.id.insert);&&&&&&&&&&&&&&updateRecordButton&=&(Button)findViewById(R.id.update);&&&&&&&&&&&&&&&&queryButton&=&(Button)findViewById(R.id.query);&&&&&&&&&&&&&&&&createButton.setOnClickListener(new&CreateListener());&&&&&&&&&&&&&&&&&updateButton.setOnClickListener(new&UpdateListener());&&&&&&&&&&&&&&&&&insertButton.setOnClickListener(new&InsertListener());&&&&&&&&&&&&&&&&&updateRecordButton.setOnClickListener(new&UpdateRecordListener());&&&&&&&&&&&&&&&&&queryButton.setOnClickListener(new&QueryListener());&&&&&&&&&&}&&&&&&&&&&class&CreateListener&implements&OnClickListener{&&&&&&&&&&&&&&&@Override&&&&&&&&&&&&&&public&void&onClick(View&v)&{&&&&&&&&&&&&&&&&&&//创建一个DatabaseHelper对象&&&&&&&&&&&&&&&&&&&&&DatabaseHelper&dbHelper&=&new&DatabaseHelper(SQLiteActivity.this,&test_mars_db&);&&&&&&&&&&&&&&&&&//只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库&&&&&&&&&&&&&&&&&&&&&SQLiteDatabase&db&=&dbHelper.getReadableDatabase();&&&&&&&&&&&&&&&}&&&&&&&&&}&&&&&&&&&class&UpdateListener&implements&OnClickListener{&&&&&&&&&&&&&&&&&&&&&@Override&&&&&&&&&&&&&&public&void&onClick(View&v)&{&&&&&&&&&&&&&&&&&&DatabaseHelper&dbHelper&=&new&DatabaseHelper(SQLiteActivity.this,&test_mars_db&,2);&&&&&&&&&&&&&&&&&&&&SQLiteDatabase&db&=&dbHelper.getReadableDatabase();&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&class&InsertListener&implements&OnClickListener{&&&&&&&&&&&&&&&&&&&&&@Override&&&&&&&&&&&&&&public&void&onClick(View&v)&{&&&&&&&&&&&&&&&&&&//生成ContentValues对象&&&&&&&&&&&&&&&&&&&&ContentValues&values&=&new&ContentValues();&&&&&&&&&&&&&&&&&&&&//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致&&&&&&&&&&&&&&&&&&&&&values.put(&id&,&1);&&&&&&&&&&&&&&&&&&&values.put(&name&,&zhangsan&);&&&&&&&&&&&&&&&&&&&&&DatabaseHelper&dbHelper&=&new&DatabaseHelper(SQLiteActivity.this,&test_mars_db&,2);&&&&&&&&&&&&&&&&&&&&SQLiteDatabase&db&=&dbHelper.getWritableDatabase();&&&&&&&&&&&&&&&&&&&&//调用insert方法,就可以将数据插入到数据库当中&&&&&&&&&&&&&&&&&&&&db.insert(&user&,&null,&values);&&&&&&&&&&&&&&}&&&&&&&&&}&&&&&&&&&&//更新操作就相当于执行SQL语句当中的update语句&&&&&&&&&&&//UPDATE&table_name&SET&XXCOL=XXX&WHERE&XXXXCOL=XX...&&&&&&&&&&&&class&UpdateRecordListener&implements&OnClickListener{&&&&&&&&&&&&&&&&&&&&&&&@Override&&&&&&&&&&&&&&public&void&onClick(View&arg0)&{&&&&&&&&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&&&&&&&&&&&&//得到一个可写的SQLiteDatabase对象&&&&&&&&&&&&&&&&&&DatabaseHelper&dbHelper&=&new&DatabaseHelper(SQLiteActivity.this,&test_mars_db&);&&&&&&&&&&&&&&&&&SQLiteDatabase&db&=&dbHelper.getWritableDatabase();&&&&&&&&&&&&&&&&&&&ContentValues&values&=&new&ContentValues();&&&&&&&&&&&&&&&&&&&values.put(&name&,&&zhangsanfeng&);&&&&&&&&&&&&&&&&&&&&//第一个参数是要更新的表名&&&&&&&&&&&&&&&&&&&&&//第二个参数是一个ContentValeus对象&&&&&&&&&&&&&&&&&&//第三个参数是where子句&&&&&&&&&&&&&&&&&&&&db.update(&user&,&values,&&id=?&,&new&String[]{&1&});&&&&&&&&&&&&&}&&&&&&&&&}&&&&&&&&&class&QueryListener&implements&OnClickListener{&&&&&&&&&&&&&&&&&&&&&&@Override&&&&&&&&&&&&&&public&void&onClick(View&v)&{&&&&&&&&&&&&&&&&&&System.out.println(&aaa------------------&);&&&&&&&&&&&&&&&&&&&Log.d(&myDebug&,&&myFirstDebugMsg&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&DatabaseHelper&dbHelper&=&new&DatabaseHelper(SQLiteActivity.this,&test_mars_db&);&&&&&&&&&&&&&&&&&SQLiteDatabase&db&=&dbHelper.getReadableDatabase();&&&&&&&&&&&&&&&&&&&Cursor&cursor&=&db.query(&user&,&new&String[]{&id&,&name&},&&id=?&,&new&String[]{&1&},&null,&null,&null);&&&&&&&&&&&&&&&&&&while(cursor.moveToNext()){&&&&&&&&&&&&&&&&&&&&&&&&String&name&=&cursor.getString(cursor.getColumnIndex(&name&));&&&&&&&&&&&&&&&&&&&&&&&&System.out.println(&query---&&&+&name);&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&}&&&&&&&&&}&&&&&&&&&&&&&&&}
sqlite的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Android中BroadCastReceiver详解
BroadcastReceiver的解释BroadcastReceiver也就是“广播接收者”的意思,它是用来接收来自系统和应用中的广播。 在Android中,Broadcast是一种广泛运用的在应用
BroadcastReceiver的解释
BroadcastReceiver也就是“广播接收者”的意思,它是用来接收来自系统和应用中的广播。
  在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。
下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程:
  (1)首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。
  (2)当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。
注册BroadcastReceiver有两种方式
  静态注册:在AndroidManifest.xml中用标签生命注册,并在标签内用标签设置过滤器。
&receiver android:name="myRecevice"&
//继承BroadcastReceiver,重写onReceiver方法
    &intent-filter&
      &action android:name="com.lc.test"/& //使用过滤器,接收指定action广播
&/intent-filter&
  &/receiver&
  动态注册: 使用IntentFilter在代码中动态的注册一个广播
 IntentFilter intentFilter = new IntentFilter();
//为BroadcastReceiver指定action,使之用于接收同action的广播
 intentFilter.addAction(String);
 registerReceiver(BroadcastReceiver,intentFilter);
 另外值得注意的是,当我们使用动态注册时候,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了,所以我们需要在onDestroy()方法中进行解除注册,一般:在onStart中注册,onStop中取消unregisterReceiver:
super.onDestroy();
unregisterReceiver(receiver);
  指定广播目标Action:Intent intent = new Intent(actionString);
  并且可通过Intent携带消息 :intent.putExtra(“msg”, “hi,我通过广播发送消息了”);
  发送广播消息:Context.sendBroadcast(intent )
其中在动态注册中可将BroadcastReceiver的继承类进行封装,添加构造函数和BroadcastReceiver注册
BroadcastReceiver的案例演示
首先我们创建一个类MyBroadcastReceiver用于继承BroadcastReceiver:
这里重写了一个方法就是接受广播的意图并匹配:
//定义的为:public static final String //ACTION_REGISTER_SUCCESS_FINISH="register.success.finish";
Constants.ACTION_REGISTER_SUCCESS_FINISH.equals(intent.getAction())
这里是常量:定义如下:
(Context context, Intent intent) {
if (intent != null && Constants.ACTION_REGISTER_SUCCESS_FINISH.equals(intent.getAction())) {
(1)接下里我们就通过“动态注册”的方式使用:
private MyBroadcastReceiver receiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BmobConstants.ACTION_REGISTER_SUCCESS_FINISH); //添加action
registerReceiver(receiver, filter); //注册
(2)静态注册的话是现在清单文件中添加:
(2-1)我们就可以使用代码了:
Intent intent = new Intent("register.success.finish");
intent.putExtra("msg", "hello receiver.");
sendBroadcast(intent);
//发送广播
普通广播(Normal Broadcast)
普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。为了验证以上论断,我们新建三个BroadcastReceiver,演示一下这个过程,FirstReceiver、SecondReceiver和ThirdReceiver的代码如下:
import android.content.BroadcastR
import android.content.C
import android.content.I
import android.util.L
String TAG = "NormalBroadcast";
(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Log.i(TAG, "FirstReceiver: " + msg);
String TAG = "NormalBroadcast";
(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Log.i(TAG, "SecondReceiver: " + msg);
String TAG = "NormalBroadcast";
(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Log.i(TAG, "ThirdReceiver: " + msg);
然后再次点击发送按钮,发送一条广播,控制台打印如下:
看来这三个接收者都接收到这条广播了,我们稍微修改一下三个接收者,在onReceive方法的最后一行添加以下代码,试图终止广播:
abortBroadcast();
再次点击发送按钮,我们会发现,控制台中三个接收者仍然都打印了自己的日志,表明接收者并不能终止广播。
有序广播(Ordered Broadcast)
你最喜欢的Android随笔之――Android广播机制Broadcast详解
 在中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责&说&而不管你&听不听&,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应用程序所接收。
一、Android广播机制三要素:
  1、广播(Broadcast):用于发送广播。是一种广泛应用的在应用间传输信息的机制
  2、广播接收器(BroadcastReceiver):用于接收广播。是对发出来的Broadcast进行过滤接受并响应的。
  3、意图内容(Intent):用于保存广播相关信息的媒介
二、广播的功能和特征:
  1、广播的生命周期很短,经过 调用对象&实现onReceive&结束 整个过程就结束了。从实现的复杂度和代码量来看,广播无疑是最迷你的Android 组件,实现往往只需几行代码。广播对象被构造出来后通常只执行BroadcastReceiver.onReceive方法,便结束了其生命周期。所以有的时候我们可以把它当做函数看也未必不可。
  2、和所有组件一样,广播对象也是在应用进程的主线程中被构造,所以广播对象的执行必须是要同步且快速的。也不推荐在里面开子线程,因为往往线程还未结束,广播对象就已经执行完毕被销毁。如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由 Service 来完成。
  3、每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应。
三、广播的两种注册方式:
  1、常驻型广播:常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册。这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的。示例代码如下: 
&receiver android:name=&.AlarmReceiver& &&!-- Reveiver名称,如果是内部类静态注册广播,请在内部类前加$ --&
& & &intent-filter&
& & & & &action android:name=&android.intent.action.ALARM_RECEIVER& /&&!-- 广播接收的Intent --&
& & & & &category android:name=&android.intent.category.DEFAULT& /&
& & &/intent-filter&
&/receiver&
  新建一个AlarmReceiver,继承BroadcastReceiver
public class AlarmReceiver extends BroadcastReceiver{
& & @Override
& & public void onReceive(Context arg0, Intent arg1) {
& & & & Toast.makeText(arg0, &我是闹钟,我要叫醒你...&, Toast.LENGTH_SHORT).show(); &
  最后创建一个简单的Activity就可以了,在里面发送一个静态广播就行了
&1 package com.example.
&3 import android.app.A
&4 import android.content.I
&5 import android.os.B
&7 public class MainActivity extends Activity {
&9 & & @Override
10 & & protected void onCreate(Bundle savedInstanceState) {
11 & & & & super.onCreate(savedInstanceState);
12 & & & & setContentView(R.layout.activity_main);
14 & & & & // 发送一个静态广播
15 & & & & Intent intent = new Intent(&android.intent.action.ALARM_RECEIVER&);
16 & & & & sendBroadcast(intent);
  2、非常驻型广播:非常驻型广播,当应用程序结束了,广播自然就没有了,比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。这样你的广播接收者就一个非常驻型的了,这种注册方式也叫动态注册。这种方式可以理解为通过代码注册的广播是和注册者关联在一起的。比如写一个监听 SDcard 状态的广播接收者:
&1 package com.example.
&3 import android.app.A
&4 import android.content.BroadcastR
&5 import android.content.C
&6 import android.content.I
&7 import android.content.IntentF
&8 import android.os.B
&9 import android.os.E
11 public class MainActivity extends Activity {
12 & & SdcardStateChanageReceiver sdcardStateR
14 & & protected void onCreate(Bundle savedInstanceState) {
15 & & & & super.onCreate(savedInstanceState);
17 & & & & // 新建一个BroadcastReceiver
18 & & & & sdcardStateReceiver = new SdcardStateChanageReceiver();
19 & & & & // 添加意图过滤器
20 & & & & IntentFilter filter = new IntentFilter();
21 & & & & // 给filter添加Action,表示只接收这几个Action的广播
22 & & & & filter.addAction(Intent.ACTION_MEDIA_REMOVED);
23 & & & & filter.addAction(Intent.ACTION_MEDIA_EJECT);
24 & & & & filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
25 & & & & // 设置SDCard插拔接收
26 & & & & filter.addDataScheme(&file&);
27 & & & & // 注册一个动态广播
28 & & & & registerReceiver(sdcardStateReceiver, filter);
31 & & protected void onDestroy() {
32 & & & & // 在摧毁Activity的时候,一定要记得注销广播,不然会报错
33 & & & & unregisterReceiver(sdcardStateReceiver);
36 & & // BroadcastReceiver
37 & & class SdcardStateChanageReceiver extends BroadcastReceiver {
38 & & & & public void onReceive(Context context, Intent intent) {
39 & & & & & & String state = Environment.getExternalStorageState();
40 & & & & & & System.out.println(state);
41 & & & & & & if (state.equals(Environment.MEDIA_REMOVED)
42 & & & & & & & & & & || state.equals(Environment.MEDIA_UNMOUNTED)) {
43 & & & & & & & & System.out.println(&SDCard 已卸载!&);
44 & & & & & & }
45 & & & & }
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver解释
Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保存其状态)。
对于Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState),以及Activity之间的跳转和数据传输(intent)。
Activity中常用的函数有SetContentView()&& findViewById()&&& finish()&& startActivity(),其生命周期涉及的函数有:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
注意的是,Activity的使用需要在Manifest文件中添加相应的&Activity&,并设置其属性和intent-filter。
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。在SDK中给出了Intent作用的表现形式为:
& 通过Context.startActivity() orActivity.startActivityForResult() 启动一个Activity;
& 通过 Context.startService() 启动一个服务,或者通过Context.bindService() 和后台服务交互;
& 通过广播方法(比如 Context.sendBroadcast(),Context.sendOrderedBroadcast(),& Context.sendStickyBroadcast()) 发给broadcast receivers。
Intent属性的设置,包括以下几点:(以下为XML中定义,当然也可以通过Intent类的方法来获取和设置)
(1)Action,也就是要执行的动作
SDk中定义了一些标准的动作,包括
&Target component
ACTION_CALL
&Initiate a phone call.
ACTION_EDIT
&Display data for the user to edit.
ACTION_MAIN
&Start up as the initial activity of a task, with no data input and no returned output.
ACTION_SYNC
&Synchronize data on a server with data on the mobile device.
ACTION_BATTERY_LOW
&broadcast receiver
&A warning that the battery is low.
ACTION_HEADSET_PLUG
&broadcast receiver
&A headset has been plugged into the device, or unplugged from it.
ACTION_SCREEN_ON
&broadcast receiver
&The screen has been turned on.
ACTION_TIMEZONE_CHANGED
&broadcast receiver
&The setting for the time zone has changed.
当然,也可以自定义动作(自定义的动作在使用时,需要加上包名作为前缀,如&com.example.project.SHOW_COLOR&),并可定义相应的Activity来处理我们的自定义动作。
(2)Data,也就是执行动作要操作的数据
Android中采用指向数据的一个URI来表示,如在联系人应用中,一个指向某联系人的URI可能为:content://contacts/1。对于不同的动作,其URI数据的类型是不同的(可以设置type属性指定特定类型数据),如ACTION_EDIT指定Data为文件URI,打电话为tel:URI,访问网络为http:URI,而由content provider提供的数据则为content: URIs。
(3)type(数据类型),显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
(4)category(类别),被执行动作的附加信息。例如 LAUNCHER_CATEGORY 表示Intent 的接受者应该在Launcher中作为顶级应用出现;而ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个,这些动作可以在同一块数据上执行。还有其他的为
CATEGORY_BROWSABLE
&The target activity can be safely invoked by the browser to display data referenced by a link & for example, an image or an e-mail message.
CATEGORY_GADGET
&The activity can be embedded inside of another activity that hosts gadgets.
CATEGORY_HOME
&The activity displays the home screen, the first screen the user sees when the device is turned on or when the HOME key is pressed.
CATEGORY_LAUNCHER
&The activity can be the initial activity of a task and is listed in the top-level application launcher.
CATEGORY_PREFERENCE
&The target activity is a preference panel.
(5)component(组件),指定Intent的的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。
(6)extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行&发送电子邮件&这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。
理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者;另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,有利于降低发送者和接收者之间的耦合。
对于显式Intent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些隐式Intent,通过解析,将 Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。&&&&&&&
Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方法如下:
& 如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;
& 如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。
& 如果Intent中的数据不是content: 类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者mailto:) 进行匹配。同上,Intent 的scheme必须出现在目标组件的scheme列表中。
& 如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。比如Intent中包含了两个类别:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。
Intent-Filter的定义
一些属性设置的例子:
&& &action android:name=&com.example.project.SHOW_CURRENT& /&
&& &category android:name=&android.intent.category.DEFAULT& /&
&& &data android:mimeType=&video/mpeg& android:scheme=&http& . . . /&
&& &data android:mimeType=&image/*& /&
&& &data android:scheme=&http& android:type=&video/*& /&
完整的实例
&activity android:name=&NotesList& android:label=&@string/title_notes_list&&
&&&&&&&&&&&&&&& &intent-filter&
&&&&&&&&&&&&&&&&&&&&& &action android:name=&android.intent.action.MAIN&/&
&&&&&&&&&&&&&&& &category android:name=&android.intent.category.LAUNCHER&/&
&&&&&&&&&&&&&&& &/intent-filter&
&&&&&&&&&&&&&&& &intent-filter&
&&&&&&&&&&&&&&&&&&&&& &action android:name=&android.intent.action.VIEW&/&
&&&&&&&&&&&&&&&&&&&&& &action android:name=&android.intent.action.EDIT&/&
&&&&&&&&&&&&&&&&&&&&& &action android:name=&android.intent.action.PICK&/&
&&&&&&&&&&&&&&& &category android:name=&android.intent.category.DEFAULT&/&
&&&&&&&&&&&&&&&&&&&&& &data android:mimeType=&vnd.android.cursor.dir/vnd.google.note&/&
&&&&&&&&&&&&&&& &/intent-filter&
&&&&&&&&&&&&&&& &intent-filter&
&&&&&&&&&&&&&&&&&&&&& &action android:name=&android.intent.action.GET_CONTENT&/&
&&&&&&&&&&&&&&& &category android:name=&android.intent.category.DEFAULT&/&
&&&&&&&&&&&&&&&&&&&&&& &data android:mimeType=&vnd.android.cursor.item/vnd.google.note&/&
&&&&&&&&&&&&&&& &/intent-filter&
&/activity&
Intent用法实例
1.无参数Activity跳转
& Intent it = new Intent(Activity.Main.this, Activity2.class);
& startActivity(it);&&
2.向下一个Activity传递数据(使用Bundle和Intent.putExtras)
&&&& Intent it = new Intent(Activity.Main.this, Activity2.class);
&&& Bundle bundle=new Bundle();
&&& bundle.putString(&name&, &This is from MainActivity!&);
&&& it.putExtras(bundle);&&&&&& // it.putExtra(&test&, &shuju&);
&&& startActivity(it);&&&&&&&&&&& // startActivityForResult(it,REQUEST_CODE);
对于数据的获取可以采用:
&&&&& Bundle bundle=getIntent().getExtras();String name=bundle.getString(&name&);
3.向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的Activity)
&&&&& Intent intent=getIntent();&&&&&
&&&&& Bundle bundle2=new Bundle();&&&&&&
&&&&& bundle2.putString(&name&, &This is from ShowMsg!&);&&&&&
&&&&& intent.putExtras(bundle2);&&&&&&
&&&&& setResult(RESULT_OK, intent);
4.回调上一个Activity的结果处理函数(onActivityResult)
@Override&&& protected void onActivityResult(int requestCode, int resultCode, Intent data) {&&&&&
&&&&&&&&&& // TODO Auto-generated method stub&&&&
&&&& super.onActivityResult(requestCode, resultCode, data);&&
&&&& if (requestCode==REQUEST_CODE){&&&&&&&&
&&&&&&&&&&&& if(resultCode==RESULT_CANCELED)&&&&&&
&&&&&&&&&&&&&&&&& setTitle(&cancle&);&&&&&&&&&
&&&&&&&&&&&& else if (resultCode==RESULT_OK) {&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&& String temp=&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&& Bundle bundle=data.getExtras();&&&&&&&&&&&
&&&&& if(bundle!=null)&& temp=bundle.getString(&name&);&&&&&
&&&&&&&&&& setTitle(temp);&&&&
&&&&&& }&&&
下面是转载来的其他的一些Intent用法实例(转自javaeye)
&& 1. Uri uri = Uri.parse(&&);&
&& 2. Intent it = new Intent(Intent.ACTION_VIEW, uri);&
&& 3. startActivity(it);
&& 1. Uri uri = Uri.parse(&geo:38..036476&);&
&& 2. Intent it = new Intent(Intent.ACTION_VIEW, uri);&&
&& 3. startActivity(it);&&
&& 4. //其他 geo URI 例&
&& 5. //geo:latitude,longitude&
&& 6. //geo:latitude,longitude?z=zoom&
&& 7. //geo:0,0?q=my+street+address&
&& 8. //geo:0,0?q=business+near+city&
&& 9. //google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom
&& 1. Uri uri = Uri.parse(&&);&
&& 2. Intent it = new Intent(Intent.ACTION_VIEW, uri);&
&& 3. startActivity(it);&
&& 4. //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456
&& 1. //叫出拨号程序
&& 2. Uri uri = Uri.parse(&tel:&);&
&& 3. Intent it = new Intent(Intent.ACTION_DIAL, uri);&
&& 4. startActivity(it);&
&& 1. //直接打电话出去&
&& 2. Uri uri = Uri.parse(&tel:&);&
&& 3. Intent it = new Intent(Intent.ACTION_CALL, uri);&
&& 4. startActivity(it);&
&& 5. //用@,要在 AndroidManifest.xml 中,加上&
&& 6. //&uses-permission id=&android.permission.CALL_PHONE& /&
传送SMS/MMS
&& 1. //调用短信程序
&& 2. Intent it = new Intent(Intent.ACTION_VIEW, uri);&
&& 3. it.putExtra(&sms_body&, &The SMS text&);&&
&& 4. it.setType(&vnd.android-dir/mms-sms&);&
&& 5. startActivity(it);
&& 1. //传送消息
&& 2. Uri uri = Uri.parse(&smsto://&);&
&& 3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);&
&& 4. it.putExtra(&sms_body&, &The SMS text&);&
&& 5. startActivity(it);
&& 1. //传送 MMS&
&& 2. Uri uri = Uri.parse(&content://media/external/images/media/23&);&
&& 3. Intent it = new Intent(Intent.ACTION_SEND);&&
&& 4. it.putExtra(&sms_body&, &some text&);&&
&& 5. it.putExtra(Intent.EXTRA_STREAM, uri);&
&& 6. it.setType(&image/png&);&&
&& 7. startActivity(it);
传送 Email
&& 1. Uri uri = Uri.parse(&&);&
&& 2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);&
&& 3. startActivity(it);
&& 1. Intent it = new Intent(Intent.ACTION_SEND);&
&& 2. it.putExtra(Intent.EXTRA_EMAIL, &&);&
&& 3. it.putExtra(Intent.EXTRA_TEXT, &The email body text&);&
&& 4. it.setType(&text/plain&);&
&& 5. startActivity(Intent.createChooser(it, &Choose Email Client&));
&& 1. Intent it=new Intent(Intent.ACTION_SEND);&&&
&& 2. String[] tos={&&};&&&
&& 3. String[] ccs={&&};&&&
&& 4. it.putExtra(Intent.EXTRA_EMAIL, tos);&&&
&& 5. it.putExtra(Intent.EXTRA_CC, ccs);&&&
&& 6. it.putExtra(Intent.EXTRA_TEXT, &The email body text&);&&&
&& 7. it.putExtra(Intent.EXTRA_SUBJECT, &The email subject text&);&&&
&& 8. it.setType(&message/rfc822&);&&&
&& 9. startActivity(Intent.createChooser(it, &Choose Email Client&));
&& 1. //传送附件
&& 2. Intent it = new Intent(Intent.ACTION_SEND);&
&& 3. it.putExtra(Intent.EXTRA_SUBJECT, &The email subject text&);&
&& 4. it.putExtra(Intent.EXTRA_STREAM, &&);&
&& 5. sendIntent.setType(&audio/mp3&);&
&& 6. startActivity(Intent.createChooser(it, &Choose Email Client&));
播放多媒体
&&&&&& Uri uri = Uri.parse(&&);&
&&&&&& Intent it = new Intent(Intent.ACTION_VIEW, uri);&
&&&&&& it.setType(&audio/mp3&);&
&&&&&& startActivity(it);
&&&&&& Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, &1&);&
&&&&&& Intent it = new Intent(Intent.ACTION_VIEW, uri);&
&&&&&& startActivity(it);
Market 相关
1.&&&&&&& //寻找某个应用
2.&&&&&&& Uri uri = Uri.parse(&market://search?q=pname:pkg_name&);
3.&&&&&&& Intent it = new Intent(Intent.ACTION_VIEW, uri);&
4.&&&&&&& startActivity(it);&
5.&&&&&&& //where pkg_name is the full package path for an application
1.&&&&&&& //显示某个应用的相关信息
2.&&&&&&& Uri uri = Uri.parse(&market://details?id=app_id&);&
3.&&&&&&& Intent it = new Intent(Intent.ACTION_VIEW, uri);
4.&&&&&&& startActivity(it);&
5.&&&&&&& //where app_id is the application ID, find the ID&&
6.&&&&&&& //by clicking on your application on Market home&&
7.&&&&&&& //page, and notice the ID from the address bar
Uninstall 应用程序
1.&&&&&&& Uri uri = Uri.fromParts(&package&, strPackageName, null);
2.&&&&&&& Intent it = new Intent(Intent.ACTION_DELETE, uri);&&
3.&&&&&&& startActivity(it);
service是没有界面的长生命周期的代码。一个很好的例子是媒体播放器从列表中播放歌曲。在一个媒体播放器程序中,大概要有一个或多个活动(activity)来供用户选择歌曲并播放它。然而,音乐的回放就不能使用活动(activity)了,因为用户希望他导航到其他界面时音乐继续播放。这种情况下,媒体播放器活动(activity)要用Context.startService()启动一个服务来在后台运行保持音乐的播放。系统将保持这个音乐回放服务的运行直到它结束。注意一下,你要用Context.bindService()方法连接服务(如果它没有运行,要先启动它)。当连接到服务后,你可以通过服务暴露的一个接口和它通信。对于音乐服务,它允许你暂停、倒带,等等。
Broadcast和BroadcaseReceiver
BroadcastReceiver 简介
在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver
&& 活动(Activity) - 用于表现功能&
&& 服务(Service) - 相当于后台运行的 Activity
&& 广播(Broadcast) - 用于发送广播&
&& 广播接收器(BroadcastReceiver) - 用于接收广播
&& Intent - 用于连接以上各个,并在其间传递消息
BroadcastReceiver
&&& 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过
滤接收的过程:
&&& 首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把Intent对象以广播方式发送出去。
&&& 当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若 匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要 实现onReceive()方法。
注册BroadcastReceiver有两种方式:
&&& 一种方式是,静态的在AndroidManifest.xml中用&receiver&标签生命注册,并在标签内用&intent-filter&标签设置过滤器。
&&& 另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter对象,然后在需要注册的地方调Context.registerReceiver()方法,如果取消时就调用Context.unregisterReceiver()方法。
不管是用xml注册的还是用代码注册的,在程序退出的时候没有特殊需要都得注销,否则下次启动程序可能会有多个 BroadcastReceiver
&&& 另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用&uses-permission&标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。
&&& 同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用&uses-permission&标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。
动态注册:
&&& IntentFilter intentFilter = new IntentFilter();
&&& intentFilter.addAction(String);--为 BroadcastReceiver指定action,使之用于接收同action的广播registerReceiver(BroadcastReceiver,intentFilter);
&&& 一般:在onStart中注册,onStop中取消unregisterReceiver
发送广播消息:extends Service
&&& 指定广播目标Action:Intent Intent = new Intent(action-String)
&&& --指定了此action的receiver会接收此广播
&&& 需传递参数(可选) putExtra();
&&& 发送:sendBroadcast(Intent);
摘自 LuoXianXion
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 摘要怎么写 的文章

 

随机推荐