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

xiaoxiao2025-12-06  3

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

}});

转载请注明原文地址: https://www.6miu.com/read-5040410.html

最新回复(0)