【摘录】Intent的使用
http://sinfrancis.javaeye.com/blog/484304
在Android中,传递数据使用Intent,Intent相当于各个Activity之间的桥梁,可以传递数据,可以通过Intent启动另外一个Activity。
Intent有显式和隐式之分,显式的是直接什么要启动的组件,比如Service或者Activity,隐式的通过配置的datatype、url、action来找到匹配的组件启动。
此程序目的:
1、显式启动Activity和service
2、通过隐式的变量,启动Activity和Service
先来看先我们定义的变量类:
Java代码
- package cc.androidos.intent;
- public class Book {
- //Intent的数据类型
- public static String CONTENT_TYPE = "cc.android/intent.demo";
- //Intent中的URL,这里要使用Content开头,不然会找不到组件
- public static String CONTENT_URI = "content://test/";
- }
程序主界面的代码:还有四个按钮,分别用于启动不同的组件:
Java代码
- package cc.androidos.intent;
- import android.app.Activity;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- public class IntentDemo extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button firstbtn = (Button) findViewById(R.id.firstbtn);
- Button firstbtnservice = (Button) findViewById(R.id.firstbtnservice);
- Button secondbtn = (Button) findViewById(R.id.secondbtn);
- Button secondbtnservice = (Button) findViewById(R.id.secondbtnservice);
- firstbtn.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- //显式启动FirstIntentDemo Activity
- Intent i = new Intent(getApplicationContext(),FirstIntentDemo.class);
- startActivity(i);
- }
- });
- firstbtnservice.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- //显式启动FirstService 后台服务
- Intent i = new Intent(getApplicationContext(),FirstService.class);
- startService(i);
- }
- });
- secondbtn.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- //通过Action uri和dataype启动Activity
- //程序会自动匹配到Intent-Filter配置中有(action属性)Action为Intent.ACTION_VIEW,并且数据类型(data)为cc.android/intent.demo的组件上
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_VIEW);
- intent.setDataAndType(Uri.parse(Book.CONTENT_URI), Book.CONTENT_TYPE);
- startActivity(intent);
- }
- });
- secondbtnservice.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- //通过Action uri和dataype启动Service
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_EDIT);
- intent.setDataAndType(Uri.parse(Book.CONTENT_URI), Book.CONTENT_TYPE);
- startService(intent);
- }
- });
- }
- }
以下分别是被启动的组件代码:
显式Activity和Service:
Java代码
- package cc.androidos.intent;
- import android.app.Activity;
- import android.os.Bundle;
- public class FirstIntentDemo extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.firstintent);
- }
- }
- ===============================================
- package cc.androidos.intent;
- import android.app.Service;
- import android.content.Intent;
- import android.os.IBinder;
- import android.util.Log;
- public class FirstService extends Service{
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- @Override
- public void onCreate() {
- super.onCreate();
- String tag = "First Service on Create";
- Log.d(tag,"This is the first service...");
- }
- }
隐式启动的Activity和Service:
Java代码
- package cc.androidos.intent;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- public class SecondIntentDemo extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- String tag = "SecondIntentDemo onCreate..";
- setContentView(R.layout.secondintent);
- Intent i = getIntent();
- Log.d(tag, "intent type : " + i.getType());
- Log.d(tag, "intent url : " + i.getData().toString());
- }
- }
===================================
Java代码
- package cc.androidos.intent;
- import android.app.Service;
- import android.content.Intent;
- import android.os.IBinder;
- import android.util.Log;
- public class SecondService extends Service {
- @Override
- public IBinder onBind(Intent arg0) {
- return null;
- }
- @Override
- public void onCreate() {
- super.onCreate();
- String tag = "Second service ";
- Log.d(tag, "Startup second service... ");
- }
- }
AndroidManifest.xml文件配置:
这个很重要,需要配置好才行,不然会出现AcitvityNotFoundException
Xml代码
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="cc.androidos.intent"
- android:versionCode="1"
- android:versionName="1.0.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".IntentDemo"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <!-- First Intent Demo -->
- <activity android:name=".FirstIntentDemo" android:label="@string/app_name">
- </activity>
- <!-- Second Intent Demo -->
- <activity android:name=".SecondIntentDemo" android:label="@string/app_name">
- <intent-filter >
- <!--The intent filter parameters must match the intent datatype(mimeType) \ action -->
- <action android:name="android.intent.action.VIEW"/>
- <data android:mimeType="cc.android/intent.demo"/>
- <category android:name="android.intent.category.DEFAULT"/>
- </intent-filter>
- </activity>
- <service android:name=".FirstService" >
- </service>
- <service android:name=".SecondService" >
- <intent-filter >
- <!--The intent filter parameters must match the intent datatype(mimeType) \ action -->
- <action android:name="android.intent.action.EDIT"/>
- <data android:mimeType="cc.android/intent.demo"/>
- <category android:name="android.intent.category.DEFAULT"/>
- </intent-filter>
- </service>
- </application>
- </manifest>
posted on 2010-12-19 17:36 IamEasy_Man 阅读(262) 评论(0) 收藏 举报
浙公网安备 33010602011771号