Android学习-day4(四大组件之activity)

0、学习任务及进度

  • 四大组件-activity

1、Activity

1.1、关于AndroidManifest.xml

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2、Activity之间的跳转

  • 要实现页面的跳转并且把数据传到另外一个界面(类似JavaWeb中的登陆重定向显示)

1.2.1、通过意图实现界面跳转

1.2.1.1、显示意图

显示意图一般用于应用内组件的跳转。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private EditText mAccount;
    private EditText mPassword;
    private Button mLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initListener();
    }

    private void initListener() {
        mLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick: ");
                handlerLogin();
            }
        });
    }

    private void handlerLogin() {
        String accountText = mAccount.getText().toString().trim();
        if (TextUtils.isEmpty(accountText)) {
            Toast.makeText(this,"输入账号为空", Toast.LENGTH_SHORT).show();
            return;
        }
        String passwordText = mPassword.getText().toString().trim();
        if (TextUtils.isEmpty(passwordText)) {
            Toast.makeText(this,"输入密码为空", Toast.LENGTH_SHORT).show();
            return;
        }
        //传入另外一个界面
        //创建一个意图对象,通过startActivity方法进行跳转
        Intent intent = new Intent(this,SecondActivity.class);//跳转到了SecondActivity
        intent.putExtra("account",accountText);
        intent.putExtra("password",passwordText);
        startActivity(intent);
    }

    private void initView() {
        mAccount = this.findViewById(R.id.account);
        mPassword = this.findViewById(R.id.password);
        mLogin = this.findViewById(R.id.login);
    }
}

SecondActivity.java(要进行注册)

public class SecondActivity extends Activity {
    private static final String TAG = "SecondActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);


        Intent intent = getIntent();
        String account = intent.getStringExtra("account");
        String password = intent.getStringExtra("password");
        Log.d(TAG, "account: " + account);
        Log.d(TAG, "password: " + password);

        TextView info = this.findViewById(R.id.info);
        info.setText("账号为"+ account + "密码为" + password);
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidactivitydemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            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">

        </activity>
    </application>

</manifest>

activity_main.xml

<LinearLayout
    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=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="账号"/>

    <EditText
        android:id="@+id/account"
        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/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"/>
    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登陆"/>
</LinearLayout>

activity_second.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="登陆信息如下"/>

    <TextView
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="账号为**,密码为**"/>

效果:

在这里插入图片描述
在这里插入图片描述

1.2.1.2、隐式意图

隐式意图一般用于应用之间的跳转。

MainActivity.java

private void handlerLogin() {
        String accountText = mAccount.getText().toString().trim();
        if (TextUtils.isEmpty(accountText)) {
            Toast.makeText(this,"输入账号为空", Toast.LENGTH_SHORT).show();
            return;
        }
        String passwordText = mPassword.getText().toString().trim();
        if (TextUtils.isEmpty(passwordText)) {
            Toast.makeText(this,"输入密码为空", Toast.LENGTH_SHORT).show();
            return;
        }

        /**显示的方式
        //传入另外一个界面
        //创建一个意图对象,通过startActivity方法进行跳转
        Intent intent = new Intent(this,SecondActivity.class);
        intent.putExtra("account",accountText);
        intent.putExtra("password",passwordText);
        startActivity(intent);
         **/
        /**
         * 使用隐式意图
         */
        Intent intent = new Intent();
        intent.setAction("com.example.LOGIN_INFO");
//        intent.addCategory("android.intent.category.DEFAULT");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.putExtra("account",accountText);
        intent.putExtra("password",passwordText);
        startActivity(intent);

    }

ThirdActivity.java

public class ThirdActivity extends Activity {
    private static final String TAG = "ThirdActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Intent intent = getIntent();
        String account = intent.getStringExtra("account");
        String password = intent.getStringExtra("password");
        Log.d(TAG, "account: " + account);
        Log.d(TAG, "password: " + password);

        TextView info = this.findViewById(R.id.info);
        info.setText("账号为"+ account + "密码为" + password);
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidactivitydemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            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">

        </activity>


<!--        进行注册,并进行意图过滤-->
        <activity android:name=".ThirdActivity">
            <intent-filter>
                <action android:name="com.example.LOGIN_INFO"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>


    </application>

</manifest>

1.2.2、通过意图实现跳转至第三方应用

  • 目标就是进行跳转到浏览器

找到cmp(windows下:adb logcat | find “cmp”)
因为是可以显示的看见跳转到哪个类,所以是显示意图

1.2.2.1、显示意图

Skip2BrowserActivity.java

public class Skip2BrowserActivity extends Activity {
    private static final String TAG = "Skip2BrowserActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.skip2browser);
    }

    /**
     * 跳转到浏览器,会在点击按钮的时候进行跳转
     * @param view
     * Compononet = cmp=com.android.browser/.BrowserActivity
     * 组件名称 ComponentName = 包名/类路径.如果类前面的包名,那么就是这个类所在的包和包名一样就可以省略为"."
     * 完整写法:Compononet = cmp=com.android.browser/com.android.browser.BrowserActivity
     */
    public void skip2browser(View view){
        Log.d(TAG, "执行到skip2browser方法");


        Intent intent = new Intent();
//        //第一种写法
//        intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");

        //第二种写法
        ComponentName componentName = new ComponentName("com.android.browser","com.android.browser.BrowserActivity");
        intent.setComponent(componentName);
        startActivity(intent);
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidactivitydemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".Skip2BrowserActivity"
            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">

        </activity>


<!--        进行注册,并进行意图过滤-->
        <activity android:name=".ThirdActivity">
            <intent-filter>
                <action android:name="com.example.LOGIN_INFO"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

<!--&lt;!&ndash;        注册&ndash;&gt;-->
<!--        <activity android:name=".Skip2BrowserActivity">-->
<!--            -->
<!--        </activity>-->


    </application>

</manifest>

Skip2BrowserActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转到浏览器"
        android:layout_centerInParent="true"
        android:onClick="skip2browser"/>
</RelativeLayout>
1.2.2.2、隐式意图

Skip2BrowserActivity.java

/**
     * 隐式意图
     * @param view
     * 步骤
     * 1.创建一个intent
     * 2.给这个intent对象设置action、category值。
     * 3.startActivity跳转到另一个界面
     */
    public void skip2browserInvisible(View view){
        Intent intent = new Intent();

        /*
        <intent-filter>
                <action android:name="android.intent.action.SEARCH"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
         */
        intent.setAction("android.intent.action.SEARCH");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setPackage("com.android.browser");
        startActivity(intent);
    }

activity_skip2browser.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳转到浏览器{显示意图}"
        android:layout_centerInParent="true"
        android:onClick="skip2browserVisible"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳转到浏览器{隐式意图}"
        android:layout_centerInParent="true"
        android:onClick="skip2browserInvisible"/>
</LinearLayout>

1.2.3、显示意图和隐式意图的区别

在这里插入图片描述

显示:知道要跳转到哪个。
隐式:不知道要跳转到哪个。

1.3、界面之间的数据传递

1.3.1、基本数据类型

目标:实现基本的数据类型的传递

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * 用于跳转到第二个界面,使用显示意图进行跳转
     * @param view
     */
    public void skip2Second(View view){
        Intent intent = new Intent(this,SecondActivity.class);
//        intent.putExtra("intKey",100);
        startActivity(intent);
    }


}

SecondActivity.java

public class SecondActivity extends Activity {
    private static final String TAG = "SecondActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent intent = getIntent();
        if (intent != null) {
            //没有就返回-1
            int intValue = intent.getIntExtra("intKey", -1);
            Log.d(TAG, "intValue == " + intValue);
        }

    }
}

注册

1.3.2、对象

User类

/**
 * 为了实现对象传输
 */
public class User implements Parcelable {
    private String name;
    private int age;
    private int tall;

    public User() {
    }

    public User(String name, int age, int tall) {
        this.name = name;
        this.age = age;
        this.tall = tall;
    }

    protected User(Parcel in) {
        name = in.readString();
        age = in.readInt();
        tall = in.readInt();
    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel in) {
            return new User(in);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getTall() {
        return tall;
    }

    public void setTall(int tall) {
        this.tall = tall;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeInt(tall);
    }
}

MainActivity.java

/**
     * 一个对象传给第二个界面
     * @param view
     */
    public void sendObject(View view){
        /*
            步骤:
            1.实现界面跳转
            2.创建对象,创建的对象要实现Parcelable接口
            3.使用intent使用putExtra传递
            4.在跳转的那个界面获取intent对象
            5.通过传递的key获取value
         */
        Intent intent = new Intent(this,SecondActivity.class);
        User user = new User();
        user.setAge(10);
        user.setName("asdsa");
        user.setTall(90);
        intent.putExtra("userKey",user);
        startActivity(intent);
    }

SecondActivity.java

if (intent != null) {
            //没有就返回-1
            int intValue = intent.getIntExtra("intKey", -1);
            Log.d(TAG, "intValue == " + intValue);


            User user = intent.getParcelableExtra("userKey");
            if (user != null) {
                Log.d(TAG, "userName ==" + user.getName());
                Log.d(TAG, "userAge ==" + user.getAge());
                Log.d(TAG, "userTall ==" + user.getTall());
            }
        }

    }

1.3.3、例子

注册登陆的例子

LoginActivity.java

ublic class LoginActivity extends Activity {

    private EditText mUsername;
    private EditText mPassword;
    private Button mRegister;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        initView();

        ///监听事件
        initListener();
    }

    private void initListener() {
        mRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handleRegister();
            }
        });
    }

    private void handleRegister() {
        String username = mUsername.getText().toString().trim();
        if (TextUtils.isEmpty(username)) {
            Toast.makeText(this,"账号为空",Toast.LENGTH_SHORT).show();
            return;
        }
        String password = mPassword.getText().toString().trim();
        if (TextUtils.isEmpty(password)) {
            Toast.makeText(this,"密码为空",Toast.LENGTH_SHORT).show();
            return;
        }
        //进行注册
        Intent intent = new Intent(this,RegisterResultActivity.class);
        intent.putExtra("usernameKey",username);
        intent.putExtra("passwordKey",password);
        startActivity(intent);
        this.finish();//上一个界面结束
    }

    private void initView() {
        mUsername = this.findViewById(R.id.username_et);
        mPassword = this.findViewById(R.id.password_et);
        mRegister = this.findViewById(R.id.register_btn);

    }
}

RegisterResultActivity.java

public class RegisterResultActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        TextView result = this.findViewById(R.id.register_result);

        Intent intent = getIntent();
        if (intent != null) {
            String username = intent.getStringExtra("usernameKey");
            result.setText(username + "注册成功");
        }
    }
}

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/username_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入账号"/>


    <EditText
        android:id="@+id/password_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入密码"
        android:inputType="textPassword"/>

    <Button
        android:id="@+id/register_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册"/>
</LinearLayout>

activity_result.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/register_result"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:textSize="20sp"/>
</LinearLayout>

1.3.4、打电话

MainActivity.java

/**
     * 打电话给10086
     * @param view
     * 因为是跳转到第三方的应用,使用隐式意图,需要action和category
     */
    public void phone10086(View view){
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:10086"));

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            //在这里面向系统请求权限,如果没有在这里面处理,不会执行下面的方法了
            //这里就是向系统请求权限了,这里我还做了一个判断. sdk是M(M = 23 android L)才做这个请求,否则就不做.
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{"android.permission.CALL_PHONE"}, 111);
            }
            return;
        }
        startActivity(intent);
    }

增加权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

1.3.5、发送短信

MainActivity.java

public void sendMessage(View view){
        Intent intent = new Intent();
        intent.setAction("com.example.componentdatadeliver.SEND.MSG");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.putExtra("targetNumberKey","10086");
        intent.setData(Uri.parse("msg:查询电话费"));
        startActivity(intent);
    }

SendMsgActivity.java

public class SendMsgActivity extends Activity {

    private static final String TAG = "SendMsgActivity";
    private EditText mReceiverNumber;
    private EditText mMsgContent;
    private Button mSendMsgBtn;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_msg);


        //找控件
        initView();

        Intent intent = getIntent();
        if (intent != null) {
            String targetNumberKey = intent.getStringExtra("targetNumberKey");
            Log.d(TAG, "targetNumberKey == " + targetNumberKey);
            mReceiverNumber.setText(targetNumberKey);
            Uri data = intent.getData();
            Log.d(TAG, "data == " + data);
            if (data != null) {
                String msg = data.toString().replace("msg", "");
                mMsgContent.setText(msg);
            }
        }
    }

    private void initView() {
        mReceiverNumber = this.findViewById(R.id.receiver_number_et);
        mMsgContent = this.findViewById(R.id.msg_content_et);
        mSendMsgBtn = this.findViewById(R.id.send_msg_btn);
    }
}

注册

  <activity android:name=".SendMsgActivity">
            <intent-filter>
                <action android:name="com.example.componentdatadeliver.SEND.MSG"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="msg"/>
            </intent-filter>
        </activity>

1.4、数据回传

背景:第一个界面点击充值按钮,跳转到第二个界面进行充值,会告诉第一个界面结束(成功、失败)

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private Button mCharge;
    private TextView mPayResult;
    private static final int PAY_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();

        initListener();
    }

    private void initListener() {
        mCharge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //进行充值
                hanlder();
            }
        });
    }

    private void hanlder() {
        Intent intent = new Intent(this,PayActivity.class);
//        startActivity(intent);
        //不选择使用startActivity(),而使用startActivityForResult()
        startActivityForResult(intent,PAY_REQUEST_CODE);
    }

    private void initView() {
        mCharge = this.findViewById(R.id.charge_btn);
        mPayResult = this.findViewById(R.id.pay_result);
    }

    /**
     * 返回结果在这里进行回调
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PAY_REQUEST_CODE) {
            String resultContent = null;
            if (resultCode == 2) {
                //充值成功
                resultContent = data.getStringExtra("resultContent");
            }else if(resultCode == 3){
                //取消充值
                resultContent = data.getStringExtra("resultContent");
            }
            mPayResult.setText(resultContent);
        }
    }
}

PayActivity.java

public class PayActivity extends Activity {

    private EditText mInput;
    private Button mPayBtn;
    private Button mCancel;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay);

        initView();

        initListener();
    }

    private void initListener() {
        mCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handleCancel();
            }
        });

        mPayBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handlePay();
            }
        });

    }

    private void handleCancel() {
        Intent intent = new Intent();
        intent.putExtra("resultContent","充值取消");
        setResult(3,intent);
        finish();
    }

    private void handlePay() {
        String payNumber = mInput.getText().toString().trim();
        if (TextUtils.isEmpty(payNumber)) {
            Toast.makeText(this,"未输入充值金额",Toast.LENGTH_SHORT).show();
            return;
        }

        //进行充值

        //返回
        Intent intent = new Intent();
        intent.putExtra("resultContent","充值成功");
        setResult(2,intent);

        //结束界面
        finish();
    }

    private void initView() {
        mInput = this.findViewById(R.id.pay_input_et);
        mPayBtn = this.findViewById(R.id.pay_btn);
        mCancel = this.findViewById(R.id.cancel_pay_btn);
    }
}

1.4.1、requestCode和resultCode在这里插入图片描述

在这里插入图片描述

请求码: 因为在一个Activity中了以向其他任何Activity进行跳转,通过请求码判断是否是改Activity发出的
结果码:对一个请求的处理的不同结果。

1.5、第三方应用打开系统相机数据回传UI部分

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE = 1;
    private ImageView mResultContainer;
    private ImageView mTakePhotoBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initListener();
    }

    private void initListener() {
        mTakePhotoBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //按钮被点击之后,需要跳转到系统的相机界面
                handler();
            }
        });
    }

    private void handler() {
        Intent intent = new Intent();
        //调用系统相机
        intent.setAction("android.media.action.IMAGE_CAPTURE");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        startActivityForResult(intent,REQUEST_CODE);
    }

    private void initView() {
        mResultContainer = this.findViewById(R.id.photo_result_container);
        mTakePhotoBtn = this.findViewById(R.id.take_photo);
    }

    /**
     * 方法回调的
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE) {
            if (requestCode == Activity.RESULT_OK && data != null) {
                //成功返回
                Bitmap result = data.getParcelableExtra("data");
                if (result != null) {
                    mResultContainer.setImageBitmap(result);
                }
            }else if(requestCode == Activity.RESULT_CANCELED){
                //取消或者失败
                Toast.makeText(this,"取消拍照",Toast.LENGTH_SHORT).show();
            }
        }
    }
}

1.6、Activity的生命周期

中文文档
在这里插入图片描述
在这里插入图片描述

1.6.1、onCreate()和onDestory()

在这里插入图片描述

在这里插入图片描述
如何实现在后台程序切换的时候,数据回显,总结一下思路:

步骤
1、重写onDestory(),把数据保存到sharePreferences
2、判断内容是否为空,不空,那么进入编辑模式,拿到编辑器、保存数据、提交。
3、通过偏好设置得到内容、再输入到控件中。

1.6.2、onStart()和onStop()

举了一个例子,就是在观看电影的时候如何在接电话时视频暂停以及接听完点完继续播放视频。

1.6.3、onResume()和onPause()

理解一下六个动作:

  1. 第一次启动应用,依次调用onCreate()、onStart()、onResume()。
  2. 当切换到第二个界面的时候,第一个界面逐渐失去焦点,执行onPause(),onStop()之后第一个界面不可见。
  3. 最后当应用程序退出的时候,调用onDestory()。

1.7、Activity启动模式、任务栈

1.7.1、任务栈

以写短信为例:
在这里插入图片描述

1.7.2、启动模式

四种模式:
在这里插入图片描述
直接看作者的笔记,写的很详细
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值