如何创建一个Activity,两个Activity 之间如何通讯

本文介绍了Android开发中Activity组件的基础知识,包括创建方法及多个Activity间的交互方式。通过实例展示了如何使用Intent在不同Activity间传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天主要学习了Activity 组件,在这里作一下总结

1,学习如何创建Activity

 

 创建 Activity 要点:

(1) 一个Activity就是一个类,并且这个类要继承Activity

(2) 需要复写onCreate() 方法

(3) 每一个Activity都需要在AndroidManifest.xml文件中进行配置

(4) 为Activity添加必要的控件

下面来看一个实例:

//-----------------------------Activity_1.java---------------------------------------------------------------
package csdn.Activity1;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class Activity_1 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView textView = (TextView)findViewById(R.id.myTextView);
        Button button = (Button)findViewById(R.id.myButton);
        textView.setText("第一个textView");
        button.setText("第一个Button" + "\n" + "author:XXX" );
    }
}


对应的 main.xml 文件

//----------------------------------main.xml-----------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<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/myTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    
    <Button 
        android:id="@+id/myButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>


2,多个Activity 之间的关系

多个Activity之间通过Intent来传递信息

Intent 的基本作用

一个 Intent 对象包含了一组信息

(1) Component name 指定要启动啊一个 Activity

(2) Action 指定的Activity 要做什么

(3) Data 一个Activity 向另一个Activity 中传递怎样的数据

(4) Extras 接收者Activity 可以从 Intent 中取出发送方 Activity 的键值对

(5) Categories

(6) Flags

 

Intent 可以用于两个Activity 之间传递信息,这两个Activity 不一定是一个应用程序的两个界面,也可是不同的两个应用程序的界面。主要是一些系统调用会比较常用这种方式去调用。


下面来看一个实例

Activity_02.java

package csdn.Activity2;

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

public class Activity_02 extends Activity {
	/** Called when the activity is first created. */
	private Button myButton = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		myButton = (Button) findViewById(R.id.myButton);
		myButton.setOnClickListener(new MyButtonListener());
	}

	class MyButtonListener implements OnClickListener {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			// 生成一个Intent对象
			Intent intent = new Intent();
			intent.putExtra("testIntent", "123");
			intent.setClass(Activity_02.this, OthersActivity.class);
			Activity_02.this.startActivity(intent);
		}
	}
}



OtherActivity.java 文件

//------------------------------------------------OtherActivity.java------------------------------------
package csdn.Activity2;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class OthersActivity extends Activity {
	private TextView myTextView = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.others);
		Intent intent = getIntent();
		String value = intent.getStringExtra("testIntent");
		
		myTextView = (TextView)findViewById(R.id.myTextView);
		//myTextView.setText(R.string.other);
		myTextView.setText(value);
	}

}



<think>嗯,用户想了解如何在Android Studio中创建一个测试HTTPS通信的工程。首先,我得回忆一下Android中进行网络请求的基本步骤。HTTPS通信主要涉及到SSL/TLS证书的处理,可能需要配置网络安全设置。 用户可能已经知道如何使用HTTP,但HTTPS需要更多的安全配置。特别是在Android 9及以上,默认不允许明文通信,所以需要创建网络安全配置文件。这时候需要指导用户在AndroidManifest.xml中设置networkSecurityConfig。 接下来,具体的步骤可能包括添加网络权限,配置res/xml下的网络安全配置文件,允许用户自定义证书或信任特定域名的证书。同时,可能需要使用OkHttp或者HttpURLConnection来发起HTTPS请求。如果服务器使用自签名证书,可能需要设置信任所有证书的SSLSocketFactory,但要注意这在生产环境中不安全。 用户可能还会遇到证书验证的问题,比如证书不被信任导致请求失败。这时候需要教用户如何处理证书,比如将服务器证书放在raw目录下,然后创建自定义的TrustManager。或者使用OkHttp的CertificatePinner来锁定证书指纹,增强安全性。 另外,测试HTTPS通讯时,可能需要使用真实的域名或者本地服务器,如果是本地测试,可能需要配置Android允许访问本地地址。同时,建议用户使用Stetho等工具来调试网络请求,查看请求响应的详细信息。 最后,需要提醒用户,虽然测试时可以放宽安全设置,但在发布应用时一定要正确配置证书,避免安全漏洞。可能还需要解释不同情况下的最佳实践,比如使用权威CA颁发的证书,或者正确处理证书验证过程。</think>以下是创建Android Studio工程测试HTTPS通讯的详细步骤: --- ### **1. 创建新工程** 1. 打开Android Studio 2. 选择 **File > New > New Project** 3. 选择 **Empty Activity** 模板 4. 设置项目名称(如`HttpsTestDemo`),选择语言(Java/Kotlin) 5. 保持最低API Level ≥ 24(推荐Android 9+) --- ### **2. 配置网络权限** 在 `AndroidManifest.xml` 中添加: ```xml <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ``` --- ### **3. 配置网络安全(关键步骤)** #### (1) 创建网络安全配置文件 新建 `res/xml/network_security_config.xml`: ```xml <network-security-config> <!-- 信任所有证书(仅限调试) --> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">yourdomain.com</domain> <trust-anchors> <certificates src="system"/> <certificates src="user"/> <!-- 允许用户安装的证书 --> </trust-anchors> </domain-config> </network-security-config> ``` #### (2) 应用配置到AndroidManifest ```xml <application ... android:networkSecurityConfig="@xml/network_security_config"> ``` --- ### **4. 实现HTTPS请求(两种方式)** #### **方式一:使用OkHttp** 1. 添加依赖到 `build.gradle`: ```gradle implementation 'com.squareup.okhttp3:okhttp:4.10.0' ``` 2. 请求示例代码: ```kotlin val client = OkHttpClient.Builder() .sslSocketFactory(sslContext.socketFactory, trustManager) .build() val request = Request.Builder() .url("https://your-api-endpoint.com") .build() client.newCall(request).enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { Log.d("HTTPS_TEST", response.body?.string()) } override fun onFailure(call: Call, e: IOException) { Log.e("HTTPS_TEST", "Request failed", e) } }) ``` #### **方式二:使用HttpURLConnection** ```kotlin Thread { val url = URL("https://your-api-endpoint.com") val connection = url.openConnection() as HttpsURLConnection // 设置SSL验证(如需自定义证书验证) connection.sslSocketFactory = createCustomSSLSocketFactory() try { val inputStream = connection.inputStream // 处理响应流 } catch (e: Exception) { Log.e("HTTPS_TEST", "Error: ${e.message}") } }.start() ``` --- ### **5. 处理自签名证书(开发环境)** 当测试环境使用自签名证书时: ```kotlin private fun createUnsafeOkHttpClient(): OkHttpClient { val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager { override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {} override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {} override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf() }) val sslContext = SSLContext.getInstance("SSL") sslContext.init(null, trustAllCerts, SecureRandom()) return OkHttpClient.Builder() .sslSocketFactory(sslContext.socketFactory, trustAllCerts[0] as X509TrustManager) .hostnameVerifier { _, _ -> true } // 跳过主机名验证 .build() } ``` --- ### **6. 证书锁定(生产环境推荐)** 使用OkHttp的证书指纹锁定: ```kotlin val certificatePinner = CertificatePinner.Builder() .add("yourdomain.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAA=") // 替换真实指纹 .build() val client = OkHttpClient.Builder() .certificatePinner(certificatePinner) .build() ``` --- ### **常见问题处理** 1. **Cleartext HTTP traffic not permitted** - 确认已配置`network_security_config.xml` - 检查是否遗漏`android:usesCleartextTraffic="true"` 2. **SSLHandshakeException** - 检查服务器证书链是否完整 - 使用在线工具(如[SSL Labs测试](https://www.ssllabs.com/ssltest/))验证服务器配置 --- ### **测试建议** 1. 使用Charles/Fiddler抓包工具调试 2. 在`onCreate()`中添加StrictMode检测 ```kotlin StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .build()) ``` --- ### **注意事项** ⚠️ 生产环境中: - 必须移除信任所有证书的代码 - 使用正规CA颁发的证书 - 启用证书固定(Certificate Pinning) - 定期更新证书指纹 完整示例代码可参考:[GitHub HTTPS示例项目](https://github.com/android/security-samples/tree/main/NetworkSecurityConfiguration)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值