Android点击按钮访问URL不打开网页、不跳转Activity实现方法咨询
问题原因
你当前代码使用Intent.ACTION_VIEW启动系统 intent 的逻辑,会让系统调用第三方浏览器打开目标链接,自然会离开主Activity。要实现点击按钮后停留在原页面,只需要在应用内部直接向NodeMCU服务发起后台HTTP请求即可。
前置配置
首先在项目的AndroidManifest.xml中添加必要配置:
- 添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
- 因为你使用的是HTTP明文局域网地址,Android 9及以上系统默认禁止明文请求,需要在
<application>标签中添加属性允许明文流量:
<application ... android:usesCleartextTraffic="true" ...>
代码实现方案
我们用OkHttp实现异步网络请求,不需要手动切换线程,不会阻塞主线程也不会跳转页面:
- 首先在模块级
build.gradle的dependencies中添加OkHttp依赖:
dependencies { // 其他现有依赖 implementation 'com.squareup.okhttp3:okhttp:4.10.0' }
- 修改后的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
相关产品推荐
相关产品推荐

