黑马Android76期学习笔记01基础--day06--拨打电话、Intent、activity生命周期,任务栈、activity的四种启动模式
程序员文章站
2022-06-25 15:09:52
1.拨打电话import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity { pri...
1.拨打电话
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btnCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void callClick(View view){
//创建一个意图
Intent intent=new Intent();
//设置拨打电话的动作
intent.setAction(Intent.ACTION_CALL);
//设置拨打的数据
intent.setData(Uri.parse("tel:"+"13870215468"));
//开启Activity
startActivity(intent);
}
}
2.intent跳转到新的activity
intent就是要完成一件事
显式,隐式intent的使用场景
- 开启自己应用的界面用显式Intent
- 开启系统应用的界面用隐式Intent
- 显式意图安全些
隐式使用Intent
public void callClick(View view){
//创建一个意图
Intent intent=new Intent();
//设置跳转的动作
intent.setAction("com.fengray.testactivity");
//设置Category
intent.addCategory("android.intent.category.DEFAULT");
//开启Activity
startActivity(intent);
}
显式使用Intent
通过使用具体的activity包名和类名
public void callClick(View view){
//创建一个意图
Intent intent=new Intent();
//设置包名和类名(当前应用的包名和类名)
intent.setClassName("com.fengray.testactivity","com.fengray.testactivity.newactivity");
//开启Activity
startActivity(intent);
}
更简洁的显式写法
public void callClick(View view){
//创建一个意图,同时在构造中指定跳转的类名
Intent intent=new Intent(this,newactivity.class);
//开启Activity
startActivity(intent);
}
3.人品测算器
两个activtiy(MainActivity,ResualtActivity),两个布局(activity_main,activity_resualt)
activity_main.xml,activity_resualt.xml:略
1.ResualtActivity
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import java.io.UnsupportedEncodingException;
public class ResualtActivity extends AppCompatActivity {
private TextView tvname,tvgender,tvresualt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_resualt);
//找到控件
tvname=findViewById(R.id.tvName);
tvgender=findViewById(R.id.tvSex);
tvresualt=findViewById(R.id.tvresualt);
//获取main传递过来的数据
Intent intent=getIntent();
String name=intent.getStringExtra("name");
int gender=intent.getIntExtra("gender",0);
//根据name和sex显示数据
tvname.setText(name);
byte[] bytes=null;
try {
switch (gender){
case 1:
tvgender.setText("男");
bytes=name.getBytes("gbk");
break;
case 2:
tvgender.setText("女");
bytes=name.getBytes("utf-8");
break;
case 3:
tvgender.setText("其他");
bytes=name.getBytes("iso-8859-1");
break;
}
} catch (Exception e) {
e.printStackTrace();
}
//计算人品结果
int total=0;
for(byte b : bytes){
int number=b&0xff;
total+=number;
}
int score=Math.abs(total)%100;
if (score>90){
tvresualt.setText("您的人品爆发");
}else if(score>80){
tvresualt.setText("您的人品还不错");
}else if(score>60){
tvresualt.setText("您的人品刚及格");
}else{
tvresualt.setText("您还需要锤炼人品");
}
}
}
2.activity_main
package com.fengray.ex056;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView tvname;
private RadioGroup randiobuttonGroup;
private RadioButton male,female,other;
private Button mybtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvname=findViewById(R.id.edName);
randiobuttonGroup=findViewById(R.id.radioButtongroup);
}
//点击实现跳转
public void btnClick(View view){
//拿到文本框文本
String name=tvname.getText().toString().trim();
//判断name是否为空
if (TextUtils.isEmpty(name)){
Toast.makeText(getApplicationContext(), "请输入姓名", Toast.LENGTH_SHORT).show();
return;
}
//判断用户性别
int gender=randiobuttonGroup.getCheckedRadioButtonId();
int sex=0;
switch (gender){
case R.id.radioButtonmale:
sex=1;
break;
case R.id.radioButtonfemale:
sex=2;
break;
case R.id.radioButtonOther:
sex=3;
break;
}
if (sex==0){
Toast.makeText(getApplicationContext(), "请选择性别", Toast.LENGTH_SHORT).show();
return;
}
//跳转
Intent intent= new Intent(this,ResualtActivity.class);
intent.putExtra("name",name);
intent.putExtra("gender",sex);
startActivity(intent);
}
}
4.短信发送
传递数据过程中,"sms_body"这个key在安卓9下面带不到短信界面
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private ListView mylistview;
private String[] messages={"落花有意水无情,处暑已至秋将近。夏日炎炎将远去,秋意浓浓正濒近。夏去秋来如人生,缘来缘去不留停。世事如棋皆有法,若有不顺莫灰心。保重身体为明朝,幸福时光不会少!" ,
"时至处暑天渐凉,朋友冷暖系心上;开窗通风散余热,温差变化感冒防;萝卜冬瓜祛秋燥,一日三餐不离汤;规律起居精神足,舒活筋骨要经常。处暑快乐",
"处暑刚刚到,夏意还未消,晨起带外套,保温不感冒,午后太阳照,防晒带草帽,夜风吹树摇,添衣别胡闹,蔬菜瓜果好,补水人俊俏,短信叮嘱到,祝你心情妙!",
"处暑时节到,短信传呼你:身体健康,记得关注;温差颇大,保暖牢固;饮食卫生,时刻关注;运动锻炼,健康支柱;快乐心情,心底巩固。小小关怀,好朋友才告诉,祝你处暑愉快,幸福时时!"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mylistview=findViewById(R.id.mylistView);
//设置数据,现有数据
ArrayAdapter<String> adapter=new ArrayAdapter<>(this,R.layout.cell,messages);
mylistview.setAdapter(adapter);
//给listView设置点击事件
mylistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//点击条目,取出条目数据,数据在哪存着就去哪里取
String content=messages[position];
//定义一个intent
Intent intent=new Intent();
//设置隐式intent的action
intent.setAction("android.intent.action.SEND");
//添加Category
intent.addCategory("android.intent.category.DEFAULT");
//设置type
intent.setType("text/plain");
//传递数据,"sms_body"这个key在安卓9下面带不到短信界面
intent.putExtra("sms_body", content);
//跳转发送短信页面
startActivity(intent);
}
});
}
}
5.完整的短信发送案例
1、清单文件
<uses-permission android:name="android.permission.SEND_SMS"/>
2、主布局及其他布局
3、person模型类
package com.fengray.ex058;
public class Person {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
3、联系人返回类
package com.fengray.ex058;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.fengray.ex058.Person;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class Reback extends AppCompatActivity {
private ListView mylistView;
List<Person> persons=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reback);
mylistView=findViewById(R.id.mylistView);
//准备listView要显示的数据,模拟假数据
persons=new ArrayList<>();
for (int i=0;i<20;i++){
Person person =new Person();
person.setName("张胜"+i);
person.setPhone("1383948594"+i);
persons.add(person);
}
//展示数据
mylistView.setAdapter(new MyAdapter());
//给listview设置点击事件
mylistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//获取点我条目中的数据
String phone=persons.get(position).getPhone();
//把数据返还给调用者
Intent intent=new Intent();
intent.putExtra("phone",phone);
//
setResult(0x001,intent);
//关闭当前页面
finish();
//把phone返回给主activity
}
});
}
@Override
public void onBackPressed() {
Log.d("TAG", "onBackPressed: ------");
}
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return persons.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView==null){
view=View.inflate(getApplicationContext(),R.layout.item,null);
}else{
view=convertView;
}
//找到item定义的控件,用来显示数据
TextView tvname=view.findViewById(R.id.tvname);
TextView tvphone=view.findViewById(R.id.tvphone);
//显示数据
tvname.setText(persons.get(position).getName());
tvphone.setText(persons.get(position).getPhone());
return view;
}
}
}
4、短信模板类
package com.fengray.ex058;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.List;
public class SmsTemplateActivity extends AppCompatActivity {
private ListView mylistView;
private String[] messages={"我正在开会,稍后回复你","请问您是谁,有何贵干","妈妈不让我和陌生人说话","爸爸说遇到坏人请报警"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms_template);
mylistView=findViewById(R.id.mylistView);
//创建adapter
ArrayAdapter<String> adapter=new ArrayAdapter<>(getApplicationContext(),R.layout.messageitem,messages);
//显示数据
mylistView.setAdapter(adapter);
//设置listview的点击事件
mylistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//取出点击条目的数据
String content=messages[position];
Intent intent=new Intent();
intent.putExtra("smscontent",content);
setResult(0x002,intent);
//调用finish方法
finish();
}
});
}
}
6.activity的生命周期
- oncreate方法
- ondestroy方法:当activity销毁时调用
- onstart方法:当activity界面编程可视的时候调用
- onstop方法,当activity界面不可见
- onResume方法,界面有按钮可以被点击了,即获取了焦点
- onpause方法,界面上按钮不可以被点击,失去了焦点
7.任务栈
- 打开一个activity叫进栈,关闭一个activity叫出栈
- 我们操作的activity永远是栈顶的activity
- 任务栈是用来维护用户操作体验的
- 应用程序退出就是任务栈清空
- 一般情况下,一个应用程序对应一个任务栈
8.activity的四种启动模式
stander:标准模式
singletop:任务栈会检查任务栈栈顶的activity,复用栈顶重复的activity
singletask:直接复用原有的栈,不会检查任务栈的栈顶
singleInstance:单例模式,有自己单独的栈,比较极致的复用应用程序的实例
本文地址:https://blog.csdn.net/weixin_43745804/article/details/108113864