You need to enable JavaScript to run this app. Android点击按钮访问URL不打开网页、不跳转Activity实现方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

Android点击按钮访问URL不打开网页、不跳转Activity实现方法咨询

问题原因

你当前代码使用Intent.ACTION_VIEW启动系统 intent 的逻辑,会让系统调用第三方浏览器打开目标链接,自然会离开主Activity。要实现点击按钮后停留在原页面,只需要在应用内部直接向NodeMCU服务发起后台HTTP请求即可。

前置配置

首先在项目的AndroidManifest.xml中添加必要配置:

  1. 添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
  1. 因为你使用的是HTTP明文局域网地址,Android 9及以上系统默认禁止明文请求,需要在<application>标签中添加属性允许明文流量:
<application
    ...
    android:usesCleartextTraffic="true"
    ...>

代码实现方案

我们用OkHttp实现异步网络请求,不需要手动切换线程,不会阻塞主线程也不会跳转页面:

  1. 首先在模块级build.gradle的dependencies中添加OkHttp依赖:
dependencies {
    // 其他现有依赖
    implementation 'com.squareup.okhttp3:okhttp:4.10.0'
}
  1. 修改后的MainActivity代码:
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    // 全局初始化OkHttpClient实例
    private final OkHttpClient client = new OkHttpClient();

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

        Button on = findViewById(R.id.button);
        Button off = findViewById(R.id.button2);
        Button pink = findViewById(R.id.button3);

        on.setOnClickListener(v -> sendRequest("http://192.168.18.100/ir?code=16236607"));
        off.setOnClickListener(v -> sendRequest("http://192.168.18.100/ir?code=16203967"));
        pink.setOnClickListener(v -> sendRequest("http://192.168.18.100/ir?code=16214167"));
    }

    // 封装公共的请求方法,复用逻辑
    private void sendRequest(String url) {
        // 构建请求
        Request request = new Request.Builder()
                .url(url)
                .build();
        // 异步发起请求
        client.newCall(request).enqueue(new okhttp3.Callback() {
            @Override
            public void onFailure(okhttp3.Call call, IOException e) {
                // 请求失败的处理逻辑,不需要提示可以删除
                runOnUiThread(() -> {
                    Toast.makeText(MainActivity.this, "控制失败,请检查网络", Toast.LENGTH_SHORT).show();
                });
            }

            @Override
            public void onResponse(okhttp3.Call call, Response response) throws IOException {
                // 请求成功的处理逻辑,不需要提示可以删除
                runOnUiThread(() -> {
                    Toast.makeText(MainActivity.this, "控制指令已发送", Toast.LENGTH_SHORT).show();
                });
            }
        });
    }
}

效果说明

修改后点击按钮只会在后台向NodeMCU发送控制请求,全程不会跳转其他页面,始终停留在主Activity。


内容的提问来源于stack exchange,提问作者Muhammad Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 06:15:02