上一篇
安卓开发发送数据
- 行业动态
- 2025-04-21
- 2
安卓数据发送常见方式
HTTP/HTTPS 网络请求
- 适用场景:与服务器通信、API调用、文件上传下载
- 核心工具:
OkHttp
、Retrofit
、Volley
- 关键步骤:
- 添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
- 配置SSL(HTTPS需忽略证书验证时):
OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(trustManager.getSSLSocketFactory()) // 自定义信任管理器 .build();
- 添加网络权限:
Intent 应用内通信
- 适用场景:Activity/Service间传递数据、广播事件
- 两种类型:
| 类型 | 特点 |
|————|———————————————————————-|
| 显式Intent | 指定目标组件(如com.example.MyReceiver
) |
| 隐式Intent | 通过Action/Category匹配接收者(如ACTION_SEND
) | - 数据传递:
Intent intent = new Intent(); intent.putExtra("key", "value"); // 基本类型 intent.putExtra("image", bitmap); // Parcelable对象
蓝牙传输
- 适用场景:设备间近距离通信
- 关键流程:
- 开启蓝牙并搜索设备
- 建立
BluetoothSocket
连接 - 通过
InputStream/OutputStream
发送数据
- 权限要求:
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
短信发送
- 适用场景:通过运营商网络发送文本
- 核心API:
SmsManager
SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage("123456789", null, "Hello", null, null);
- 权限要求:
SEND_SMS
(需动态申请)
代码实现示例
OkHttp GET请求
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.example.com/data") .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { / 处理失败 / } @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); // 切换主线程更新UI } });
Retrofit POST请求
public interface ApiService { @POST("/upload") Call<ResponseBody> upload(@Body RequestBody body); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService service = retrofit.create(ApiService.class);
广播发送与接收
// 发送广播 Intent intent = new Intent("com.example.CUSTOM_BROADCAST"); sendBroadcast(intent); // 接收器注册(静态/动态) public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 处理广播 } }
数据发送方式对比表
方式 | 协议层 | 适用场景 | 需权限 | 需网络 |
---|---|---|---|---|
HTTP/HTTPS | 应用层 | 服务器通信 | INTERNET | |
Bluetooth | 蓝牙协议 | 设备间近距离传输 | BLUETOOTH系列 | |
SMS | 电信协议 | 短信文本传输 | SEND_SMS | |
Intent | Android内部 | 应用内组件通信 | 无 | 无 |
相关问题与解答
Q1: 如何保证HTTP请求的安全性?
A1:
- 强制使用HTTPS协议(配置服务器SSL证书)
- 客户端验证证书有效性(避免中间人攻击)
- 对敏感数据进行加密(如AES加密后传输)
- 示例(忽略证书验证,仅开发环境使用):
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){...}}; OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(trustManager.getSSLSocketFactory(), trustAllCerts[0]) .build();
Q2: 除了Intent,还有哪些跨进程通信方式?
A2:
| 方式 | 特点 |
|——————–|———————————————————————-|
| Messenger
| 基于AIDL
的轻量级消息机制,适合单向通信 |
| ContentProvider
| 共享数据接口,支持多进程读写(如访问联系人数据库) |
| BroadcastReceiver
| 系统级事件通知,适合解耦模块 |
| AIDL
| Android接口定义语言,支持复杂对象双向传输(需实现.aidl
文件)