使用意图intent构建一个多活动的Android应用

安卓意图Intent是Android应用组件(Activity、Service、Broadcast Receiver)之间进行交互的一种重要方式。Intent允许启动一个活动、启动一个服务、传递广播等。Intent使应用能够响应系统及其他应用的动作。Intent使用的主要目的有:
1、 启动Activity:可以启动自己应用内的Activity,也可以启动其他应用的Activity。例如,打电话、发短信、打开地图等。
2、 启动Service:启动后台Service来执行耗时任务。例如,播放音乐,网络下载文件等。
3、 发送和接收广播:发送广播到其他应用,或者接收系统和其他应用的广播。例如,电量变化、时间变化等广播。
4、 传递数据:通过Intent可以在Activity、Service、Broadcast Receiver之间传递数据。例如,从一个Activity传递数据到另一个Activity。
Android的四大组件(Activity、Service、Broadcast Receiver、Content Provider)都是通过Intent来互相通信的。所以Intent机制是Android应用组件之间的重要联系纽带,它使得Android应用变得松耦合、功能更加灵活,这也是Android应用框架的精髓所在。总之,学好Intent机制,知道如何通过Intent在各组件之间跳转传值,是开发Android应用的重要一环。熟练使用Intent可以让我们的应用具有更强的扩展性和交互性。

下面来借助intent实现一个多活动的Android意图:
活动是用户能完成的一个确定的事情。如果能把多个活动串在一起来完成某个复杂的工作,这称为一个任务。比如显示一个菜单就是一个活动,如果应用很简单,一个活动就足够了。很多情况下,用户不只是做一件事情,这就需要使用多个活动了,比如一个用来显示菜谱,一个用来增加菜谱。
下面来构建一个包含两个活动的应用,第一个活动允许输入一个消息,单击第一个活动中的按钮时,它会启动第二个活动,并传入这个消息。第二个活动再显示这个消息。
这个应用包含两个活动两个布局:
1、应用运行时,首先会启动活动CreateMessageActivity。
这个活动使用布局activity_create_message.xml。
2、用户单击CreateMessageActivity中的按钮,这回启动活动ReceiveMessageActivity。这个活动使用布局activity_receive_message.xml。
工程布局
创建工程
使用AS新建一个Android工程,应用名为My Messenger,公司域名为hfad.com。最低SDK为API19保证能在大多数设备上都能运行。需要创建一个CreateMessageActivity的空活动,相应布局名为activity_create_message。确保创建活动时不要选中Backwards Compatibility(AppCompat)选项。
activity_create_message.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical"
    tools:context="com.hfad.mymessenger.CreateMessageActivity"
    >
    <EditText 
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:hint="@string/hint"
        android:ems="10"
        />
    <Button
        android:id="@+id/send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:onClick="onSendMessage"
        android:text="@string/send"
        />
</LinearLayout>

EditText元素定义了一个可编辑的文本域,用来输入文本。
hint属性为用户提供一个提示,指出应当在这个文本域键入什么文本。我们需要把它增加为一个字符串资源。
ems属性描述EditText该有多宽,其宽度足以容纳几个字母m

然后更新string.xml

<resources>
    <string name="app_name">My Messenger</string>
    <string name="send">Send Message</string>
    <string name="hint">Enter a message</string>
    <string name="chooser">Send message via...</string>
</resources>

打开CreateMessageActivity.java文件,把AS为你创建的代码替换为以下代码:

package com.hfad.mymessenger;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

//确保继承了Activity类
public class CreateMessageActivity extends Activity {
	@override
	//创建活动时会调用onCreate()方法
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_create_message);
	}
	
	//单击按钮时会调用这个方法
	public void onSendMessage(View view){
		//从ID为message的可编辑文本域得到文本
		EditText messageView = (EditText)findViewById(R.id.message);
		String messageText = messageView.getText().toString();
		//创建意图,指定了将要接收这个意图的活动。就像在信封上写地址一样。
		//第一个参数告诉Android这个意图来自哪个对象,可以用this表示当前对象
		//第二个参数是需要接收这个意图的那个活动的类名
		Intent intent = new Intent(this, ReceiveMessageActivity.class);
		//将这个文本增加到意图,指定名为message
		intent.putExtra(ReceiveMessageActivity.EXTRA_MESSAGE, messageText);
		//启动意图中指定的活动
		startActivity(intent);
	}
}

右击包名new一个activity,命名为ReceiveMessageActivity,布局命名为activity_receive_message,另外不要选中Launcher Activity和Backwards Compatibility。
到目前为止,我们已经创建了一个包含两个活动的应用,而且每个活动都有自己的布局,接下来要做的就是在用户单击Send Message按钮时让CreateMessageActivity调用ReceiveMessageActivity。要让活动启动另一个活动,需要使用一个意图intent。可以把intent看作是一个想要做某件事的意图,意图是一个消息类型

activity_receive_message.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical"
    tools:context="com.hfad.mymessenger.ReceiveMessageActivity"
    >
    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

ReceiveMessageActivity.java

package com.hfad.mymessenger;

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

public class ReceiveMessageActivity extends Activity {
    public static final String EXTRA_MESSAGE = "message";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive_message);
        Intent intent = getIntent();
        String messageText = intent.getStringExtra(EXTRA_MESSAGE);
        TextView messageView = (TextView)findViewById(R.id.message);
        messageView.setText(messageText);
    }
}

GitHub:https://github.com/dogriffiths/HeadFirstAndroid2ndEdition/tree/master/chapter03/MyMessenger

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值