欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

黑马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);
    }
}

黑马Android76期学习笔记01基础--day06--拨打电话、Intent、activity生命周期,任务栈、activity的四种启动模式
黑马Android76期学习笔记01基础--day06--拨打电话、Intent、activity生命周期,任务栈、activity的四种启动模式

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、主布局及其他布局
黑马Android76期学习笔记01基础--day06--拨打电话、Intent、activity生命周期,任务栈、activity的四种启动模式
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();
            }
        });
    }
}

黑马Android76期学习笔记01基础--day06--拨打电话、Intent、activity生命周期,任务栈、activity的四种启动模式

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