`
baobeituping
  • 浏览: 1064425 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Intent学习

阅读更多

Intent学习

Intent是一种运行时机制,在应用程序运行时连接两个不个不同的组件。一般的应用是通过Intent向Android发送某种请求,
然后android系统会根据请求查询某个组件声明的intentfiler,找到需要的组件并运行他。

激活一个Activity组件的时候,需要调用Content.startActivity或通过Content.startActivityForResult来传递intent.

首先我们来举例说明一个打电话的程序。

package com.app;

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

public class AndroidApplication extends Activity {
 /** Called when the activity is first created. */
 private Button btn1 = null;
 private Button btn2 = null;
 private Button btn3 = null;
 private EditText et = null;
 private OnClickListener listener = new OnClickListener() {
  public void onClick(View v) {
   Button btnButton = (Button) v;
   Intent intent = new Intent();
   intent.setAction(Intent.ACTION_CALL);
   intent.setData(Uri.parse("tel://15273289826"));//电话号码必须是以tel://+号码的方式
   startActivity(intent);//通过该方法来启动一个新的activity。
   
  };
 };

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  btn3 = (Button) this.findViewById(R.id.btn3);
  btn3.setOnClickListener(listener);
 }
 
 
}

注意在你的AndroidManifest.xml中必须注册你的ACTIVITY有拨打电话的权限。
AndroidManifest.xml
<uses-permission android:name="android.permission.CALL_PHONE"/>

启动一个新的Activity,然后在第一个和第二个ACTIVITY传递参数
1.新建一个类
package com.app;

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

public class SecondActivity extends Activity {

 public static final int REQUEST=1;
 private Button btn1 = null;
 public User user;
 private OnClickListener listener = new OnClickListener() {
  public void onClick(View v) {
   Button btnButton = (Button) v;
   Intent intent = new Intent();
   user.setName("吴蔚玲");
   intent.putExtra("user", user);
   setResult(REQUEST,intent);
   finish();
  };
 };
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.second);
  Intent intent = this.getIntent();
  Bundle bundle=intent.getExtras();
  user = (User) bundle.getSerializable("user");
  EditText et = (EditText) this.findViewById(R.id.et);
  et.setText(user.getName());
  btn1 = (Button) this.findViewById(R.id.btn1);
  btn1.setOnClickListener(listener);
  
  
 }
}

注意我们可以通过intent来传递参数
   Intent intent = new Intent();
   
   intent.setClass(AndroidApplication.this,SecondActivity.class);//第一个参数是第一个ACTIVITY,第二个参数是第二个ACTIVITY
   //通过intent.putExtra方法来传递参数,类似servlet,表示一个跳转,然后通过setAttribute来传递参数。如果要传递一个对象的话,这个对象必须实现Serializable接口。
   User user = new User();
   user.setName("涂平");
   intent.putExtra("user", user);
   //startActivity(intent);//通过这个方法启动的话,就不要求跳转的ACTIVITY有返回值
   startActivityForResult(intent, 1);//通过这个方法,表示跳转过去的activity有返回值。

获取参数的方法
  Intent intent = this.getIntent();
  Bundle bundle=intent.getExtras();
  user = (User) bundle.getSerializable("user");
1.首先通过获得一个Intent
2.然后通过获取一个Bundle,这个Bundle可以通过类似获取一个Map的方法,来获得里面的对象。
3.因为我放进去的是一个对象,所以通过bundle.getSerializable的方法来得到这个对象。


因为第一个ACTIVITY中,采取的是startActivityForResult(intent, 1);表示可以获取第二个ACTIVITY返回的参数。
第一个ACTIVITY必须重写onActivityResult方法:
//第一个参数表示的是本activity的INT类型参数,对应的就是startActivityForResult(intent, 1);中的1.第二个INT参数是第二个ACTIVITY中的
setResult(REQUEST,intent);中的REQUEST,这个参数是我在SecondActivity中定义的。具体意思就是首先匹配是谁先发起的,然后是谁返回的,这样就可以
对应判断了。然后传回一个Intent,我们就可以采取获取参数的方法,来得到第二个ACTIVITY中传递回来的参数了。
@Override
 protected void onActivityResult(int requestCode,int resultCode,Intent data)
 {
  if(requestCode==1)
  {
   if(resultCode==SecondActivity.REQUEST)
   {
    EditText et = (EditText) this.findViewById(R.id.et);
    Bundle bt = data.getExtras();
    User user = (User) bt.getSerializable("user");
    et.setText(user.getName());
   }
  }
 }


写好第二个ACTIVITY后,然后要配置到AndroidManifest.xml中
<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".AndroidApplication"
                  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=".SecondActivity"//.表示当前目录,package="com.app",在该XML文件中有一个包名,表示的就是该目录。
                  android:label="@string/app_name">
        </activity>
    </application>


//该方法是用来保存activity中的状态的,比如某个ACTIVITY失效后,你再次进入页面需要还原上一个状态文本框里面的值,就可以调用该方法。
调用该方法以后,在 public void onCreate(Bundle savedInstanceState) 中有个Bundle参数,这样我们就明白这个方法里面为什么要有这么个参数了。
就是为了还原在onSaveInstanceState中保存的参数用的。
@Override
 protected void onSaveInstanceState(Bundle outState) {
  // TODO Auto-generated method stub
  super.onSaveInstanceState(outState);
  Log.i(TAG,"onSaveInstanceState...");
  etEditText = (EditText) this.findViewById(R.id.et);
  String content = etEditText.getText().toString();
  outState.putString(CONTENT, content);
 }

分享到:
评论

相关推荐

    安卓基本知识之Intent学习源代码

    在本"安卓基本知识之Intent学习源代码"中,我们将深入探讨Intent的工作原理、类型、构造及其在实际开发中的应用。 一、Intent的基本概念 Intent是Android系统中的一个消息对象,它用来表示一个动作和动作的数据。...

    Android Intent 学习笔记

    Android Intent 学习笔记

    android的intent学习笔记.pdf

    android的intent学习笔记.pdf

    Android Intent 学习

    在Android开发中,Intent是一个非常核心且重要的组件,它起到了应用程序之间通信的桥梁作用。Intent不仅可以启动活动(Activity)、服务(Service),...通过实践“Android Intent学习实例”,能够巩固和提升这些知识。

    android的intent学习笔记(20220104210037).pdf

    android的intent学习笔记(20220104210037).pdf

    Android信使intent学习源码,实现打电话,发短信

    NULL 博文链接:https://cndemoz.iteye.com/blog/1169575

    Android应用源码之7.Intent初级学习-IT计算机-毕业设计.zip

    通过分析和实践这个Intent学习项目,你将掌握如何有效地使用Intent进行组件间的通信,提高你的Android应用开发能力。同时,这个项目也将帮助你在毕业设计论文中阐述Intent在移动应用开发中的关键作用及其具体实现...

    [Android开发从零开始].7.Intent初级学习

    在这个初级学习阶段,我们将深入理解Intent的基本概念、类型以及如何使用。 一、Intent基础 Intent在Android系统中扮演着“信使”的角色,它能启动新的Activity或Service,或者向BroadcastReceiver发送广播。Intent...

    android intent源码学习

    在这个"android intent源码学习"的主题中,我们将深入探讨Intent的工作原理和源码实现。 首先,Intent分为显式Intent和隐式Intent。显式Intent通过指定组件的完全限定类名来直接启动目标组件,而隐式Intent则不指定...

    Android学习总结-Intent详解.doc

    Intent在Android开发中扮演着至关重要的角色,它是四大组件(Activity、Service、BroadcastReceiver和ContentProvider)间通信的关键。Intent不仅用于应用间的交互,也可以在同一个应用内的不同组件之间传递信息。...

    Intent系统调用示例

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者广播接收器...通过IntentDemo项目的学习,开发者可以更深入地掌握Intent的工作原理和应用场景。

    7.Intent初级学习.rar

    本压缩包“7.Intent初级学习”包含了一系列关于Intent的基础知识,帮助初学者理解并掌握Intent的使用。 1. Intent的基本概念 Intent是一个对象,它封装了应用中的操作请求。通过Intent,开发者可以声明一个意图执行...

    Android应用源码之Intent_Intent.zip

    这个压缩包“Android应用源码之Intent”很可能会包含多个示例项目,演示了Intent的各种用法,包括启动Activity、传递数据、使用Intent Filter等,通过学习这些示例,开发者可以更好地理解和掌握Intent在实际开发中的...

    android Intent的用法

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast ...通过不断地实践和学习,你将能够灵活运用Intent来构建高效、流畅的应用程序。

    intent的初级学习

    在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它被用来启动或启动另一个Activity、Service,甚至可以传递数据。本篇文章将详细讲解Intent的初级概念及其使用。 1. **Intent的基本概念** Intent在...

    显式和隐式、过滤器intent的使用

    在Android应用开发中,Intent是连接各个组件的重要桥梁,它被用来启动Activity、Service,或者传递数据。...通过学习和实践,开发者可以充分利用Intent的强大功能,打造功能丰富、用户体验优秀的应用程序。

    intent的深入分析

    Intent是Android系统中一个至关重要的组件,它是应用程序之间通信的主要桥梁。通过Intent,我们可以启动活动(Activity)、服务(Service)或者广播...通过不断的实践和学习,我们可以更好地掌握Intent,提升开发能力。

    应用源码之7.Intent初级学习.zip

    本资料主要针对Intent的初级学习,涵盖了Intent的基本概念、创建方法以及常见用途,旨在帮助初学者理解和掌握这一关键知识点。 Intent主要分为显式Intent和隐式Intent两种类型。显式Intent通过指定Component(如...

Global site tag (gtag.js) - Google Analytics