现在位置: 首页 > 笔记 > 心得 > 正文

《Android应用开发详解》- Chapter06_Intent_ComponentName – Intent的ComponentName属性

2013年10月23日 暂无评论 ⁄ 被围观 (浏览总计: 127 次)+

Intent的中文意思是“意图,意向”,可以把它理解成不同组件之间通信的“媒介”或者“信使”,也就是把“把我的意思、意图告诉它”。可以把它理解成进程间的消息通信机制。Intent可以用来启动一个Activity,或者启动一个Service,还可以发起一个广播(Broadcast)。具体用法见下表:

表1 Intent启动不同组件的方法
组件名称 方法名称
Activity startActivity()
startActivityForResult()
Service startService()
bindService()
Broadcasts sendBroadcast()
sendOrderedBroadcast()
sendStickyBroadcast()

Intent由以下几个部分组成:动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Component)和扩展信息(Extra)。通过这些可以启动其它组件并携带信息。

Intent在寻找(匹配)目标组件时有2种方法:第一,通过组件名称直接指定;通过Intent的Filter过滤指定。本例演示通过组件名称直接指定,后续的例子演示通过Filter过滤指定。

1. 布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<Button 
		android:text="测试Intent的组件名称属性" 
		android:id="@+id/myButton01" 
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"></Button>
</LinearLayout>

2. 布局文件my_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

	<TextView 
		android:text="@+id/TextView01" 
		android:id="@+id/TextView01" 
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"></TextView>
	
</LinearLayout>

3. MainActivity.java(包com.amaker.ch06.app)

package com.amaker.ch06.app;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * @author 郭宏志
 * 测试Intent的ComponentName属性
 */
public class MainActivity extends Activity {
	private Button btn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置视图布局
        setContentView(R.layout.main);
        // 实例化Button
        btn = (Button)findViewById(R.id.myButton01);
        // 添加单击监听器
        btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 实例化组件名称
				ComponentName cn = new ComponentName(MainActivity.this, "com.amaker.ch06.app1.MyActivity");
				// 实例化Intent
		        Intent intent = new Intent();
		        // 为Intent设置组件名称属性
		        intent.setComponent(cn);
		        // 启动Activity
		        startActivity(intent);
			}
		});
    }
}

4. MyActivity.java(包com.amaker.ch06.app1)

package com.amaker.ch06.app1;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

import com.amaker.ch06.app.R;

/**
 * @author 郭宏志
 * 测试Intent的ComponentName属性
 */
public class MyActivity extends Activity {
	// 声明TextView
	private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	// 设置视图布局
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);
        // 获得Intent
        Intent intent = this.getIntent();
        // 获得组件名称对象
        ComponentName cn = intent.getComponent();
        // 获得包名称
        String packageName = cn.getPackageName();
        // 获得类名称
        String className = cn.getClassName();
        // 实例化TextView
        tv = (TextView)findViewById(R.id.TextView01);
        // 显示
        tv.setText("组件包名称:"+packageName+"\n"+"组件类名称:"+className);
    }
}

5. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.amaker.ch06.app"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.amaker.ch06.app1.MyActivity"/>
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest> 

6. 运行结果

Chapter06_Intent_ComponentName-1

Chapter06_Intent_ComponentName-2

Chapter06_Intent_ComponentName实例源码:

Chapter06_Intent_ComponentName
标题: Chapter06_Intent_ComponentName (367 次点击)
文件: Chapter06_Intent_ComponentName.7z
大小: 15 kB
描述:

  打分:5.0/5 (共1人投票)

给我留言