以下内容Sinfrancis版权所有,专注请注明来自 http://mdev.cc/dev


在Android中,传递数据使用Intent,Intent相当于各个Activity之间的桥梁,可以传递数据,可以通过Intent启动另外一个Activity。
Intent有显式和隐式之分,显式的是直接什么要启动的组件,比如Service或者Activity,隐式的通过配置的datatype、 url、action来找到匹配的组件启动。
此程序目的:
1、显式启动Activity和service
2、通过隐式的变量,启动Activity和Service

先来看先我们定义的变量类:
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/";}

程序主界面的代码:还有四个按钮,分别用于启动不同的组件:
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:
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:
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()); }}

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 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> 

更多相关文章

  1. Android(安卓)Activity堆栈信息
  2. Android跳转支付宝生活缴费界面
  3. android 开发艺术探索-Activity的生命周期和启动模式
  4. 手把手教你如何在Android(安卓)Studio 中配置Android(安卓)Desig
  5. react-native启动android service bug解决办法
  6. android 中activity的启动模式是singleTask时清除activity的栈顶
  7. Android中插件化的简单实现:启动未注册的Activity
  8. eclipse Android开发环境配置
  9. Android(安卓)存储设备管理 -- MountService

随机推荐

  1. 每一位Android开发者应该知道的Android体
  2. Android使用XML全攻略
  3. Android(安卓)Bluetooth蓝牙开发\蓝牙协
  4. android上使用XML
  5. Android内核开发:图解Android系统的启动过
  6. Android防止内存溢出浅析
  7. Android(安卓)Provision (Setup Wizard)
  8. Android的Window类
  9. FFmpeg在Android上的移植优化步骤
  10. android与C++的选择