Android快速入门(二)四大应用组件之一Activity(打电话和发短信)功能练习

Android快速入门(二)四大应用组件之一Activity(打电话和发短信)功能练习,第1张

概述一、理论概述1、Activity的理解(1)组件的特点:它的类必须实现特定的接口或继承特定类需要在配置文件中配置其全类名它的对象不是通过new来创建的,而是系统自动创建的它的对象具有一定的生命周期,它的类中有对应的生命周期的回调方法(2)Activity的定义Activity,直接翻译为活 一、理论概述1、Activity的理解(1)组件的特点:它的类必须实现特定的接口或继承特定类需要在配置文件中配置其全类名它的对象不是通过new来创建的,而是系统自动创建的它的对象具有一定的生命周期,它的类中有对应的生命周期的回调方法(2)Activity的定义Activity,直接翻译为活动,它是AndroID定义的四大应用组件之一,它也是最重要的用的最多的Activity用来提供一个能让用户 *** 作并与之交互的界面一个应用有多个用户界面,也就是包含多个Activity打电话,发短信,拍照,发邮件等功能都是通过Activity来做的(3)类比Activity与Servlet

2、Intent和IntentFilter的理解Intent(1)Intent的理解Intent,直译为意图,也就是你想要做什么事情,或者想去哪里?Intent是Activity,Service和BoradcastReceiver这三个应用组件之间进行通信的信者例如:我要在Activity中启动另外一个Activity,就必须使用Intent对象意图对象还可以携带数据注意:Intent不是AndroID中的四大应用组件之一(2)Intent的分类

显示意图:明确指定的目标组件的意图

创建对象:Intent(Context context,Class clazz)何时使用:当 *** 作当前自己应用的组件时使用

隐式意图:没有明确指定目标组件的意图

创建对象::Intent(String action)何时使用:当 *** 作其他应用的组件时候使用IntentFilterIntentFilter的理解

IntentFilter意图过滤器

3、相关API



二、Activity的开发1、Activity的使用

测试

(1)创建项目工程






(2)界面布局

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent"    androID:orIEntation="vertical" >    <EditText        androID:ID="@+ID/et_main_message"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"         androID:hint="请输入您的信息"         >        <requestFocus />    </EditText>    <button        androID:ID="@+ID/btn_main_start1"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="一般启动" />    <button        androID:ID="@+ID/btn_main_start2"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="带回调启动" /></linearLayout>
(3)实现Activity的功能:设计第一个界面1)定义所有需要 *** 作的视图对象,并初始化2)给视图设置监听3)在回调方法当中实现逻辑
package com.itzheng.lo2_activity;import androID.app.Activity;import androID.os.Bundle;import androID.vIEw.Menu;import androID.vIEw.MenuItem;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.Toast;/* * 1、布局界面 * 2、实现Activity的功能 * 1)定义所有需要 *** 作的视图对象并初始化 * 2)给视图设置监听 * 3)在回调方法当中实现逻辑 */public class MainActivity extends Activity implements OnClickListener {	private EditText et_main_message;	private button btn_main_start1;	private button btn_main_start2;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);                //初始化视图对象        et_main_message = (EditText) findVIEwByID(R.ID.et_main_message);        btn_main_start1 = (button) findVIEwByID(R.ID.btn_main_start1);        btn_main_start2 = (button) findVIEwByID(R.ID.btn_main_start2);        //设置点击监听        btn_main_start1.setonClickListener(this);        btn_main_start2.setonClickListener(this);    }	@OverrIDe	public voID onClick(VIEw v) {//v就是发生事件的视图对象( *** 作的视图)		if(v==btn_main_start1){			Toast.makeText(this, "一般启动", 0).show();		}else if(v==btn_main_start2){			Toast.makeText(this, "带回调的启动", 0).show();		}	}}
(4)实现Activity的功能:设计第二个界面(实现一般启动)1)定义好界面二

a、布局
b、定义Activity类






activity_second.xml

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent"    androID:orIEntation="vertical" >    <EditText        androID:ID="@+ID/et_second_message"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"         androID:hint="请输入您的信息"         >        <requestFocus />    </EditText>    <button        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="一般返回" />    <button        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="带结果返回" /></linearLayout>

c、配置好
d、重写onCreate(),方法并加载布局

package com.itzheng.lo2_activity;import androID.app.Activity;import androID.os.Bundle;import androID.vIEw.Menu;import androID.vIEw.MenuItem;public class SecondActivity extends Activity {	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_second);	}}

AndroIDManifest.xml当中

<activity androID:name="com.itzheng.lo2_activity.SecondActivity" androID:label="@string/Title_activity_second"> </activity>
2)启动界面二

在MainActivity当中
1)创建Intent对象(显示)
2)通过intent额外携带数据
3)启动Activity

package com.itzheng.lo2_activity;import androID.app.Activity;import androID.content.Intent;import androID.os.Bundle;import androID.vIEw.Menu;import androID.vIEw.MenuItem;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.Toast;/* * 1、布局界面 * 2、实现Activity的功能 * 1)定义所有需要 *** 作的视图对象并初始化 * 2)给视图设置监听 * 3)在回调方法当中实现逻辑 */public class MainActivity extends Activity implements OnClickListener {	private EditText et_main_message;	private button btn_main_start1;	private button btn_main_start2;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        //初始化视图对象        et_main_message = (EditText) findVIEwByID(R.ID.et_main_message);        btn_main_start1 = (button) findVIEwByID(R.ID.btn_main_start1);        btn_main_start2 = (button) findVIEwByID(R.ID.btn_main_start2);        //设置点击监听        btn_main_start1.setonClickListener(this);        btn_main_start2.setonClickListener(this);            }	@OverrIDe	public voID onClick(VIEw v) {//v就是发生事件的视图对象( *** 作的视图)		if(v==btn_main_start1){			Toast.makeText(this, "一般启动", 0).show();			//创建Intent对象(显示)			Intent intent = new Intent(this, SecondActivity.class);			//通过intent额外携带数据			String message = et_main_message.getText().toString();			intent.putExtra("MESSAGE",message);			//启动Activity			startActivity(intent);					}else if(v==btn_main_start2){			Toast.makeText(this, "带回调的启动", 0).show();		}			}}

在SecondActivity当中
1)得到intent对象
2)通过intent对象读取额外数据
3)显示到EditText当中

package com.itzheng.lo2_activity;import androID.app.Activity;import androID.content.Intent;import androID.os.Bundle;import androID.vIEw.Menu;import androID.vIEw.MenuItem;import androID.Widget.EditText;public class SecondActivity extends Activity {	private EditText et_second_message;	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_second);				et_second_message = (EditText) findVIEwByID(R.ID.et_second_message);				//得到Intent对象		Intent intent = getIntent();		//通过intent读取额外数据		String message = intent.getStringExtra("MESSAGE");		//显示到EditText		et_second_message.setText(message);					}}

测试


3)实现一般返回

a、在显示Second界面的时候,Main界面其实还在,只是被覆盖了
b、关闭当前界面(回到上一个界面):finish()
修改activity_second.xml


修改SecondActivity类

4)实现带回调的启动与结果返回

在MainActivity当中

else if (v == btn_main_start2) {			Toast.makeText(this, "带回调的启动", 0).show();			// 创建Intent对象(显示)			Intent intent = new Intent(this, SecondActivity.class);			// 通过intent额外携带数据			String message = et_main_message.getText().toString();			intent.putExtra("MESSAGE", message);			// 带回调启动Activity			int requestCode = 2;// 请求码			startActivityForResult(intent, requestCode);		}	}	@OverrIDe	protected voID onActivityResult(int requestCode, int resultCode, Intent data) {		// Todo auto-generated method stub		// 判断code		if (requestCode == 2 && resultCode == 3) {			// 从data当中取出数据			String result = data.getStringExtra("RESulT");			// 显示出来			et_main_message.setText(result);		}	}

在SecondActivity

public voID back2(VIEw v){		//保存结果,准备一个带额外数据的intent对象		Intent data = new Intent();		data.putExtra("RESulT", et_second_message.getText().toString());		int resultCode = 3;//结果码		//设置返回的结果		setResult(resultCode,data);		//关闭当前界面		finish();	}

测试


(5)启动一个Activity的流程图

2、Activity的生命周期(1)安卓界面的四种状态

(2)Activity的方法

(3)测试应用理解上诉方法






/* * 1)界面从“死亡”--->“运行” * 2)界面从“运行”--->“死亡” * 3)界面从“运行”--->“停止” * 4)界面从“停止”--->“运行” * 5)界面从“运行”--->“暂停” * 6)界面从“暂停”--->“运行” */public class MainActivity extends Activity {		public MainActivity() {		Log.e("TAG", "MainActivity()");	}	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		Log.e("TAG", "onCreate()");		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_main);	}		@OverrIDe	protected voID onStart() {		Log.e("TAG", "onStart()");		super.onStart();	}	@OverrIDe	protected voID onResume() {		Log.e("TAG", "onResume()");		super.onResume();	}	@OverrIDe	protected voID onPause() {		Log.e("TAG", "onPause()");		super.onPause();	}	@OverrIDe	protected voID onStop() {		Log.e("TAG", "onStop()");		super.onStop();	}	@OverrIDe	protected voID onDestroy() {		Log.e("TAG", "onDestroy()");		super.onDestroy();	}		@OverrIDe	protected voID onRestart() {		Log.e("TAG", "onRestart()");		super.onRestart();	}	}
1)界面从“死亡”—>“运行”:将程序运行即可


创建对象–>创建Activity–>开始运行Activity–>正在运行Activity2)界面从“运行”—>“死亡”
点击返回键



暂停(休眠)–>停止–>销毁3)界面从“运行”—>“停止”
点击HOME



暂停–>停止

4)界面从“停止”—>“运行”
长按HOME键



从新开始–>开始–>正在运行5)界面从“运行”—>“暂停”
a. 修改布局activity_main界面
添加一个按钮

<button        androID:ID="@+ID/button1"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:layout_centerHorizontal="true"        androID:layout_centerVertical="true"        androID:text="启动界面二"         androID:onClick="startSecond"        />

b.在MainActivity类当中添加方法

public voID startSecond(VIEw v){		startActivity(new Intent(this,SecondActivity.class));	}

c.创建SecondActivity类


d.修改activity_second.xml

e.修改AndroIDManifest.xml


f.运行


暂停

6)界面从“暂停”—>“运行”
点空白处



运行3、Activity的TaskStack



只有最上面的任务栈的栈顶的Activity才能显示在窗口当中

4、Activity的launchMode

5、通过创建一个工程来掌握上诉的方法以及内容

创建MainActivity,SecondActivity,
ThreeActivity以及对应的布局文件activity_main.xml,activity_second.xml,activity_three.xml

(1)standard模式

MainActivity
public class MainActivity extends Activity {	public MainActivity(){		Log.e("TAG", "MainActivity()");	}	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		Log.e("TAG", "onCreate()");		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_main);	}	public voID startSecond(VIEw v) {		startActivity(new Intent(this, SecondActivity.class));	}	public voID startFirst(VIEw v) {		startActivity(new Intent(this, MainActivity.class));	}}
activity_main.xml
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent"    androID:orIEntation="vertical" >    <TextVIEw        androID:ID="@+ID/textVIEw1"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="界面1111111111" />    <button        androID:ID="@+ID/button1"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="启动界面2"        androID:onClick="startSecond" />    <button        androID:ID="@+ID/button2"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="启动界面1"         androID:onClick="startFirst" /></linearLayout>
SecondActivity
public class SecondActivity extends Activity {	public SecondActivity(){		Log.e("TAG", "SecondActivity()");	}	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_second);	}	public voID startThree(VIEw v) {		startActivity(new Intent(this, ThreeActivity.class));	}	public voID startFirst(VIEw v) {		startActivity(new Intent(this, MainActivity.class));	}}
activity_second.xml
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent"    androID:orIEntation="vertical" >    <TextVIEw        androID:ID="@+ID/textVIEw1"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="界面22222222222" />    <button        androID:ID="@+ID/button1"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="启动界面3"        androID:onClick="startThree" />    <button        androID:ID="@+ID/button2"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="启动界面1"         androID:onClick="startFirst" /></linearLayout>
ThreeActivity
public class ThreeActivity extends Activity {		public ThreeActivity(){		Log.e("TAG", "ThreeActivity()");	}	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_three);	}}
activity_three.xml
<relativeLayout 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"    tools:context="${relativePackage}.${activityClass}" >    <TextVIEw        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="界面3333" /></relativeLayout>
测试


@H_403_632@







@H_403_656@

运行结果

(2)singletop(顶部单例)模式修改AndroIDManifest.xml
androID:launchMode="singletop"


启动界面后在主界面上点击启动界面1没有反应,在界面2 点击启动界面1的时候,会重新创建一个界面1

@L_502_44@(3)singleTask模式


无论在什么位置点击启动界面1只会创建一个界面1,将界面2销毁了

(4)singleInstance

点击界面2,启动界面2,点击界面3,启动界面3,点击返回则启动界面1,点击返回启动界面2
设置singleInstance的界面会新栈,之前创建的栈当中没有界面2,只有界面3和界面1

总结


三、功能练习1、打电话和发短信(工程搭建以及界面布局)

(1)创建App02_Activity





(2)界面布局

1)分析界面结构:垂直的linearLayout(内水平的linearLayout)
2)编写代码:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent"    androID:orIEntation="vertical" >    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content" >        <TextVIEw            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="电话号码:" />        <EditText            androID:ID="@+ID/et_main_number"            androID:layout_wIDth="fill_parent"            androID:layout_height="wrap_content"             androID:hint="请输入号码">        </EditText>    </linearLayout>     <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content" >        <TextVIEw            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="短信内容:" />        <EditText            androID:ID="@+ID/et_main_sms"            androID:layout_wIDth="fill_parent"            androID:layout_height="wrap_content"             androID:hint="请输入短信">        </EditText>    </linearLayout>    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content" >        <button            androID:ID="@+ID/btn_main_call"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="打电话" />        <button            androID:ID="@+ID/btn_main_send"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="发短信" />    </linearLayout></linearLayout>

(3)在Activity当中初始化需要 *** 作的视图对象

MainActivity

package com.itzheng.app02_activity;import androID.app.Activity;import androID.os.Bundle;import androID.Widget.button;import androID.Widget.EditText;public class MainActivity extends Activity {	private EditText et_main_number;	private EditText et_main_sms;	private button btn_main_call;	private button btn_main_send;	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_main);		//初始化视图对象		et_main_number = (EditText) findVIEwByID(R.ID.et_main_number);		et_main_sms = (EditText) findVIEwByID(R.ID.et_main_sms);		btn_main_call = (button) findVIEwByID(R.ID.btn_main_call);		btn_main_send = (button) findVIEwByID(R.ID.btn_main_send);	}}
(4)给视图当中的button设置点击监听 ,给视图当中button设置长按监听

public class MainActivity extends Activity implements OnLongClickListener {	private EditText et_main_number;	private EditText et_main_sms;	private button btn_main_call;	private button btn_main_send;	private OnClickListener onClickListener = new VIEw.OnClickListener() {		@OverrIDe		public voID onClick(VIEw v) {			if (v == btn_main_call) {// 点击的是打电话				Toast.makeText(MainActivity.this, "点击打电话", 0).show();			} else if (v == btn_main_send) {// 点击发短信				Toast.makeText(MainActivity.this, "点击发短信", 0).show();			}		}	};	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_main);		// 初始化视图对象		et_main_number = (EditText) findVIEwByID(R.ID.et_main_number);		et_main_sms = (EditText) findVIEwByID(R.ID.et_main_sms);		btn_main_call = (button) findVIEwByID(R.ID.btn_main_call);		btn_main_send = (button) findVIEwByID(R.ID.btn_main_send);		// 给视图对象设置点击监听		btn_main_call.setonClickListener(onClickListener);		btn_main_send.setonClickListener(onClickListener);		// 给视图对象设置长按监听		btn_main_call.setonLongClickListener(this);		btn_main_send.setonLongClickListener(this);	}	@OverrIDe	public boolean onLongClick(VIEw v) {		if (v == btn_main_call) {// 长按打电话			Toast.makeText(this, "长按打电话", 0).show();		} else if (v == btn_main_send) {// 长按发短信			Toast.makeText(this, "长按发短信", 0).show();		}		return true;	}}
2、实现打电话(1)实现点击打电话,进入拨打的界面:修改MainActivity的onClick

a、创建一个Intent(隐式);
b、携带数据
c、startActivity(intent);
在模拟器当中启动电话,观察LogCat当中的Activitymanger对应的内容

@OverrIDe		public voID onClick(VIEw v) {			if (v == btn_main_call) {// 点击的是打电话				// Toast.makeText(MainActivity.this, "点击打电话", 0).show();				// a、创建一个Intent(隐式);				String action = "androID.intent.action.DIAL";				action = Intent.ACTION_DIAL;// 和上面的androID.intent.action.DIAL一样				Intent intent = new Intent(action);				// b、携带数据				String number = et_main_number.getEditableText().toString();				intent.setData(Uri.parse("tel:" + number));//tel:固定前缀 <data-androID:scheme="tel">				// c、startActivity(intent);				startActivity(intent);			} else if (v == btn_main_send) {// 点击发短信				Toast.makeText(MainActivity.this, "点击发短信", 0).show();			}		}


(2)长按“打电话”:直接进入拨打电话界面修改MainActivity的onLongClick

a、创建一个Intent(隐式);
b、携带数据
c、startActivity(intent);


@OverrIDe	public boolean onLongClick(VIEw v) {		if (v == btn_main_call) {// 长按打电话			//Toast.makeText(this, "长按打电话", 0).show();			//a、创建一个Intent(隐式);			Intent intent = new Intent(Intent.ACTION_CALL);//androID.intent.action.CALL			//b、携带数据			String number = et_main_number.getEditableText().toString();			intent.setData(Uri.parse("tel:"+number));			//c、startActivity(intent);			startActivity(intent);		} else if (v == btn_main_send) {// 长按发短信			Toast.makeText(this, "长按发短信", 0).show();		}		return true;// 表示此事件已经被消费了,不会再触发点击事件	}

直接运行会抛出异常,权限被拒绝

(3)添加权限



(4)测试运行


3、实现发短信(1)实现单击进入短信编辑界面

a、创建一个Intent(隐式);
b、携带数据
c、startActivity(intent);

//Toast.makeText(MainActivity.this, "点击发短信", 0).show();				//a、创建一个Intent(隐式);				Intent intent = new Intent(Intent.ACTION_SENDTO);//androID.intent.action.SENDTO				//b、携带数据(号码/内容)				String number = et_main_number.getText().toString();				String sms = et_main_sms.getText().toString();				intent.setData(Uri.parse("smsto:"+number));				intent.putExtra("sms_body", sms);//携带额外数据				//c、startActivity(intent);				startActivity(intent);


(2)实现长按直接发送短信

需要创建另外一个模拟器



a、得到SmsManager对象
b、发送文本信息(短信)

else if (v == btn_main_send) {// 长按发短信			Toast.makeText(this, "长按发短信", 0).show();			//a、得到SmsManager对象			SmsManager manager = SmsManager.getDefault();			//b、发送文本信息(短信)			String number = et_main_number.getText().toString();			String sms = et_main_sms.getText().toString();			manager.sendTextMessage(number, null, sms, null, null);					}

运行的时候选择5556


直接发送会报错,权限不足,添加发短信的权限

<!-- 发短信的权限 -->    <uses-permission androID:name="androID.permission.SEND_SMS"/>

5556发送短信


5554接收到短信

总结

以上是内存溢出为你收集整理的Android快速入门(二)四大应用组件之一Activity(打电话和发短信)功能练习全部内容,希望文章能够帮你解决Android快速入门(二)四大应用组件之一Activity(打电话和发短信)功能练习所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1054052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存