Android 中的intent 和 广播接收器 的使用

Intent是一种轻量级的消息传递机制,可以在同一个应用程序内部的不同组件之间传递消息,也可以在不同应用程序之间的组件之间传递消息,还可以作为广播事件发布Android系统消息。由于Intent的存在,使得Android系统相互独立的组件成为了一个相互通信的组件集合。除此之外,intent在Android系统上可以发布消息,其他程序通过注册intent过滤器获得广播消息。在Android系统中,应用程序一般有多个Activity,intent可以实现在不同Activity之间切换和数据传递。intent分为显示启动和隐式启动,显示启动必须在intent中指明启动的Activity所在的类,而隐式启动,intent中只需要包含要执行的动作和所包含的数据,而无需指明具体启动哪一个Activity,选择权由Android系统和最终用户决定

 

本次所用的代码实现的是该题的要求

显示启动时必须创建一个intent,并为它指定当前的应用程序上下文以及要启动的Activity,把创建好的intent作为参数传递给startActivity()方法。

Intent fintent = new Intent(FirstActivity.this, SecondActivity.class); //创建intent对象,并指定程序上下文

startActivity(fintent);

上述两行代码中,创建intent对象,并指定程序上下文以及要启动的Activity,其中FirstActivity.this 是第一个页面所执行的Java代码,SecondActivity.class是将要加载的Activity对应的类名

在使用两个Activity时必须在AndroidManifest.xml文件中注册这两个Activity。注册时使用<activity>标签

AndroidManifest.xml文件代码如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.jinworks">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".FirstActivity">   //主界面
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity">  //注册第二个Activity
</activity>
<activity android:name=".ThirdActivity">//注册第三个Activity
</activity>
<receiver android:name=".MyBroadcastReceiver">             //<receiver>标签间注册光播接收器
<intent-filter>
<action android:name="com.example.administrator.jinworks"/>
</intent-filter>
</receiver>
</application>
</manifest>

intent启动Activity的代码

Intent fintent = new Intent();

fintent.setClass(FirstActivity.this, SecondActivity.class);

fintent.putExtra("str",string);  

startActivity(fintent);

 

将字符串加载到intent上的代码,在启动intent时将字符串传递到第二个页面

fintent.putExtra("str",string);   //其中"str"是要传递的字符串string 的键值

//在第二个界面上接受,是利用“str”这个键值获取从第一个界面传来的值

Intent sintent = getIntent();

Bundle bundles = sintent.getExtras();

string = bundles.getString("str");

FirstActivity.java代码

package com.example.administrator.jinworks;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class FirstActivity extends AppCompatActivity {
Button bu11 ;
EditText edittext1,edittext2;
TextView textview1,textview2;
String str1,str2,str3,str4,string;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
bu11= (Button)findViewById(R.id.Bu11);
edittext1 = (EditText)findViewById(R.id.ev11);
edittext2 = (EditText)findViewById(R.id.ev12);
textview1 = (TextView)findViewById(R.id.tv11);
textview2 = (TextView)findViewById(R.id.tv12);
bu11.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

str1 = edittext1.getText().toString();
str2 = edittext2.getText().toString();
str3 = textview1.getText().toString();
str4 = textview2.getText().toString();
string = str3+str1 +"\n"+ str4+str2+"\n";

//这是使用intent启动Activity的核心代码
Intent fintent = new Intent();
fintent.setClass(FirstActivity.this, SecondActivity.class);
fintent.putExtra("str",string);  
startActivity(fintent);
}
});
}
}

FirstActivity.java 对应的页面布局是activity_first.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:orientation="vertical"
android:id="@+id/activity_first"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.jinworks.FirstActivity">

<TextView
android:id="@+id/tv11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:" />
<EditText
android:id="@+id/ev11"
android:layout_width="250dip"
android:layout_height="50dip" />
<TextView
android:id="@+id/tv12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"/>
<EditText
android:id="@+id/ev12"
android:layout_width="250dip"
android:layout_height="50dip" />
<Button
android:id="@+id/Bu11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下一步"/>
</LinearLayout>

SecondActivity.java代码如下

package com.example.administrator.jinworks;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
* Created by Administrator on 2018/10/25 0025.
*/

public class SecondActivity extends AppCompatActivity {
Button bu21;
EditText edittext21,edittext22,edittext23,edittext24;
TextView textview21,textview22,textview23,textview24;
String string2,str21,str22,str23,str24,str25,str26,str27,str28;
String string;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
bu21 = (Button)findViewById(R.id.Bu21);
edittext21 = (EditText)findViewById(R.id.ev21);
edittext22 = (EditText)findViewById(R.id.ev22);
edittext23 = (EditText)findViewById(R.id.ev23);
edittext24 = (EditText)findViewById(R.id.ev24);

textview21 = (TextView)findViewById(R.id.tv21);
textview22 = (TextView)findViewById(R.id.tv22);
textview23 = (TextView)findViewById(R.id.tv23);
textview24 = (TextView)findViewById(R.id.tv24);
str25 = textview21.getText().toString();
str26 = textview22.getText().toString();
str27 = textview23.getText().toString();
str28 = textview24.getText().toString();

Intent sintent = getIntent();
Bundle bundles = sintent.getExtras();
string = bundles.getString("str");
//edittext21.setText(string);



bu21.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
str21 = edittext21.getText().toString();
str22 = edittext22.getText().toString();
str23 = edittext23.getText().toString();
str24 = edittext24.getText().toString();
string2 = string +str25+str21+ "\n" +str26+str22+ "\n" +str27+str23+ "\n" +str28+str24 ;

Intent sintent = new Intent();
sintent.setClass(SecondActivity.this, ThirdActivity.class);
sintent.putExtra("str1",string2);
startActivity(sintent);
}
});
}
}

SecondActivity.java对应的布局代码

<?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:orientation="vertical"
    android:id="@+id/activity_second"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.administrator.jinworks.SecondActivity">

    <TextView
        android:id="@+id/tv21"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="电话:" />
    <EditText
        android:id="@+id/ev21"
        android:layout_width="250dip"
        android:layout_height="50dip" />
    <TextView
        android:id="@+id/tv22"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="电子邮箱:"/>
    <EditText
        android:id="@+id/ev22"
        android:layout_width="250dip"
        android:layout_height="50dip" />
    <TextView
        android:id="@+id/tv23"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="职业:" />
    <EditText
        android:id="@+id/ev23"
        android:layout_width="250dip"
        android:layout_height="50dip" />
    <TextView
        android:id="@+id/tv24"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="技术职务:" />
    <EditText
        android:id="@+id/ev24"
        android:layout_width="250dip"
        android:layout_height="50dip" />
    <Button
        android:id="@+id/Bu21"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下一步"/>
</LinearLayout>

ThirdActivity.java

package com.example.administrator.jinworks;


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
* Created by Administrator on 2018/10/25 0025.
*/

public class ThirdActivity extends AppCompatActivity {
Button bu31;
String string2;
TextView textview;
String UNIQUE_STRING = "com.example.administrator.jinworks";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
textview = (TextView)findViewById(R.id.tv31) ;
bu31 = (Button)findViewById(R.id.Bu31);

Intent sintent = getIntent();
Bundle bundles = sintent.getExtras();
string2 = bundles.getString("str1");
textview.setText(string2);



bu31.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent tintent = new Intent(UNIQUE_STRING);
tintent.putExtra("key",string2);
sendBroadcast(tintent);
}
});
}
}

ThirdActivity.java布局文件

<?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:orientation="vertical"
android:id="@+id/activity_third"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.jinworks.ThirdActivity">

<TextView
android:id="@+id/tv31"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:" />
<Button
android:id="@+id/Bu31"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确认提交"/>
</LinearLayout>

广播接收器:光播接收器要在AndroidManifest.xml中注册

<receiver android:name=".MyBroadcastReceiver">

<intent-filter>

<action android:name="com.example.administrator.jinworks"/>

</intent-filter>

</receiver>

实现广播接收的代码:

package com.example.administrator.jinworks;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
* Created by Administrator on 2018/10/26 0026.
*/

public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
String msg = intent.getStringExtra("key");
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}

注意:接收EditText输入的值的代码要写在按钮的监听事件中,否则在还没有输入的时候,接收输入的代码已经执行完成,不能再接收输入的值

bu11.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

 

str1 = edittext1.getText().toString();

str2 = edittext2.getText().toString();

str3 = textview1.getText().toString();

str4 = textview2.getText().toString();

string = str3+str1 +"\n"+ str4+str2+"\n";

 

//这是使用intent启动Activity的核心代码

Intent fintent = new Intent();

fintent.setClass(FirstActivity.this, SecondActivity.class);

fintent.putExtra("str",string);  

startActivity(fintent);

}});

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值