如何通过POST方法将Android设备信息发送至PHP页面?求可行示例
简单可行的Android POST发送设备信息到PHP实现方案
我来给你一个亲测有效的实现方案,分Android端和PHP端两部分,逻辑清晰好上手~
Android 端实现
咱们用OkHttp来做网络请求,它比原生HttpURLConnection简洁太多,现在大部分Android项目都在用它。
1. 先加依赖
打开你的app/build.gradle,在dependencies块里添加OkHttp的依赖:
dependencies { implementation 'com.squareup.okhttp3:okhttp:4.12.0' }
同步一下gradle就可以用了。
2. 获取设备信息 + 发送POST请求
直接上完整代码,你可以把这段逻辑放在按钮点击事件或者合适的异步触发点里:
import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import java.io.IOException; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 点击按钮触发发送请求 public void sendDeviceInfo(View view) { // 1. 先把你需要的设备信息都取出来 String serial = Build.SERIAL; String board = Build.BOARD; String display = Build.DISPLAY; String model = Build.MODEL; String id = Build.ID; String manufacturer = Build.MANUFACTURER; String brand = Build.BRAND; String type = Build.TYPE; String user = Build.USER; // 2. 必须在子线程发网络请求!Android不让在主线程搞这个 new Thread(() -> { OkHttpClient client = new OkHttpClient(); // 构建POST表单参数,键值对对应PHP端要接收的字段 RequestBody formBody = new FormBody.Builder() .add("serial", serial) .add("board", board) .add("display", display) .add("model", model) .add("id", id) .add("manufacturer", manufacturer) .add("brand", brand) .add("type", type) .add("user", user) .build(); // 替换成你的PHP接口地址,比如本地测试用http://10.0.2.2/xxx.php Request request = new Request.Builder() .url("http://你的服务器地址/device_info.php") .post(formBody) .build(); try { Response response = client.newCall(request).execute(); // 请求成功的话,回到主线程弹个提示 if (response.isSuccessful() && response.body() != null) { String result = response.body().string(); runOnUiThread(() -> Toast.makeText(MainActivity.this, "发送成功:" + result, Toast.LENGTH_SHORT).show()); } else { runOnUiThread(() -> Toast.makeText(MainActivity.this, "发送失败", Toast.LENGTH_SHORT).show()); } } catch (IOException e) { e.printStackTrace(); runOnUiThread(() -> Toast.makeText(MainActivity.this, "网络异常:" + e.getMessage(), Toast.LENGTH_SHORT).show()); } }).start(); } }
3. 别忘了加网络权限
在AndroidManifest.xml里添加上网权限,不然请求会失败:
<uses-permission android:name="android.permission.INTERNET" />
PHP 端接收代码
创建一个device_info.php文件,放到你的服务器上,代码如下:
<?php // 用??处理参数,避免没收到参数报错 $serial = $_POST['serial'] ?? '未知'; $board = $_POST['board'] ?? '未知'; $display = $_POST['display'] ?? '未知'; $model = $_POST['model'] ?? '未知'; $id = $_POST['id'] ?? '未知'; $manufacturer = $_POST['manufacturer'] ?? '未知'; $brand = $_POST['brand'] ?? '未知'; $type = $_POST['type'] ?? '未知'; $user = $_POST['user'] ?? '未知'; // 这里可以把数据存数据库,先简单返回成功信息给Android端 $response = array( 'status' => 'success', 'msg' => '设备信息已接收', 'data' => array( 'serial' => $serial, 'board' => $board, 'display' => $display, 'model' => $model, 'id' => $id, 'manufacturer' => $manufacturer, 'brand' => $brand, 'type' => $type, 'user' => $user ) ); // 返回JSON格式的响应,方便Android解析 header('Content-Type: application/json'); echo json_encode($response); ?>
小提醒
- 如果是用Android模拟器测试本地服务器,记得把
http://localhost换成http://10.0.2.2(模拟器的本地主机映射地址)。 - 要是不想用OkHttp,也可以用原生
HttpURLConnection,但代码会繁琐很多,OkHttp确实是目前最省心的选择。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

