Intent 类型
intent是一个消息传递对象,你可以使用它从其他应用组件请求操作。intent的常用操作。
启动Activity
activity已知是一个android的一个界面,通过调用startActivity(),我们可以启动一个新的activity,并且实现界面的跳转。并且可以传递一些简单的数据。
如果我们希望能够从一个activity获取result的时候,我们可以调用startActivityForResult().这样,我们就可以启动一个新的activity,并且当这个新的activity执行完成后,我们可以得到一些返回的数据。
启动服务
service是一个不会使用用户界面,也就是在后台运行的一个线程或者进程。将intent传递给startService(),我们可以启动一个服务完成一些操作,如播放音乐等。intent的主要作用是用来设置要启动的服务过程,并且可以传递一些简单的数据。
传递广播
广播式android的一个相当重要的组件,广播是任何应用都可以接受的消息。系统针对系统事件传递各种广播。通过intent传递给sendBroadcast(),sendOrderBroadcast()或者sendStickyBroadcast().,这样可以将广播传递给其他应用。
intent的使用分为两种类型
显式使用intent:明确指定activity来启动组件。这样使用比较简单,但是有明确的要求就是,我们必须在我们需要明确的知道要启动的activity的类名。创建显式intent启动activity和service,系统将立即启动intent对象中指定的应用组件。代码:
Intent intent=new Intent(); intent.setClass(MainActivity.this, DisplayMessageActivity.class); EditText edit=(EditText)findViewById(R.id.edit1); String message=edit.getText().toString(); intent.putExtra("message", message); startActivity(intent);
隐式使用intent:不特别指定要启动相应的activity的类名,而只要声明要执行的常规操作,从而允许其他应用中的组件来处理它。创建隐式intent时,android系统通过将intent的内容与设备上其他应用的清单文件中声明的intent过滤器进行比较,从而找到要其动态的相应组件。如果intent和intent过滤器匹配,则系统将启动该组件,并且向其传递intent,以启动一个新的activity或service。并且如果有多个intent过滤器匹配,则系统会弹出一个对话框,以便用户选择要执行的新的应用,就如同windows下对文件的打开方式有多中时,我们选择打开软件的对话框一样。
特别注意intent过滤器是应用清单文件的一个表达式,也可以看成是一种模式匹配,它指定该组件接受的intent的类型。
相比于显式intent,隐式intent则有许多不同,它并不明确指出要启动的哪一个activity,而是要指定一系列更为抽象的action和category等信息,然后交给系统区分析这样intent,并由系统找出合适的activity去启动。
<activity android:name="com.example.dya1118.DisplayMessageActivity"
android:label="@string/DisplayMessage">
<intent-filter>
<action android:name="com.example.dya1118.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
代码中<action>标签中出表明了当前activity可以响应“com.example.dya1118.DisplayMessageActivity",这个action,而<category>标签则包括了一些附加信息,更精确地指明了当前的activity能够相应的intent中还可能带有的category。只要<action>和<category>中的内容同时能够匹配上intent中指定的action和category时,这个activity才能响应应该intent.代码中android.intent.category.DEFAULT,是一种默认类型,在调用startActivity()方法的时候会自动将这个category添加大intent中,所以不许要在指定category。
隐式intent启动其他程序的activity
上述的intent都是启动一个程序内的不同的activity, 但是intent还可以启动其他程序的activity,这样方便android多个应用程序之间的功能共享。如我们可以在应用程序中个需要展示一个网页,这是就可以调用系统的浏览器来打开这个网页。代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button=(Button)findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent=new Intent(); intent.setData(Uri.parse("http://www.163.com")); startActivity(intent); } }); }
代码中setData(),接收一个Uri对象,主要用于指定当前intent正在操作的数据,而这些数据通常都是以字符创的形式传入到Uri.parse()方法中解析产生的。
posted on 2016-11-19 14:11 lichao_normal 阅读(260) 评论(0) 收藏 举报
浙公网安备 33010602011771号