You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目从离线模式转为在线模式的实现方法

实现Android应用仅联网时可打开(Java版)

步骤1:添加网络权限

在AndroidManifest.xml中添加必要的网络权限,用于检测网络状态和访问网络:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

步骤2:编写网络状态检测工具类

创建工具类封装网络检测逻辑,方便在各个页面调用:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetworkUtils {
    // 检测设备是否处于联网状态
    public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null) {
            NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
            return activeNetwork != null && activeNetwork.isConnected();
        }
        return false;
    }
}

步骤3:在启动页检测网络并控制应用启动

选择应用的第一个启动Activity(比如闪屏页SplashActivity或主页面MainActivity),在onCreate方法中检测网络状态:

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class SplashActivity extends AppCompatActivity {

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

        // 检查网络状态
        if (!NetworkUtils.isNetworkAvailable(this)) {
            // 无网络时弹出提示并终止应用
            new AlertDialog.Builder(this)
                    .setTitle("网络提示")
                    .setMessage("当前无可用网络,请联网后再打开应用")
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish(); // 关闭当前页面
                            System.exit(0); // 退出应用进程
                        }
                    })
                    .setCancelable(false) // 禁止通过点击外部关闭对话框
                    .show();
            return;
        }

        // 联网状态下执行正常启动逻辑,比如跳转到主页面
        // startActivity(new Intent(this, MainActivity.class));
        // finish();
    }
}

可选:监听网络状态变化(防止使用中断网)

如果需要在用户使用过程中检测到断网就退出应用,可以注册网络回调监听:

import android.net.ConnectivityManager;
import android.net.Network;
// ... 其他导入

public class SplashActivity extends AppCompatActivity {
    private ConnectivityManager.NetworkCallback networkCallback;

    @Override
    protected void onStart() {
        super.onStart();
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        networkCallback = new ConnectivityManager.NetworkCallback() {
            @Override
            public void onLost(Network network) {
                super.onLost(network);
                // 网络断开时在主线程弹出提示并退出
                runOnUiThread(() -> {
                    new AlertDialog.Builder(SplashActivity.this)
                            .setTitle("网络断开")
                            .setMessage("网络已中断,请重新联网后使用")
                            .setPositiveButton("确定", (dialog, which) -> {
                                finish();
                                System.exit(0);
                            })
                            .setCancelable(false)
                            .show();
                });
            }
        };
        cm.registerDefaultNetworkCallback(networkCallback);
    }

    @Override
    protected void onStop() {
        super.onStop();
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (networkCallback != null) {
            cm.unregisterNetworkCallback(networkCallback);
        }
    }

    // ... 其他代码
}

注意事项

  • ACCESS_NETWORK_STATE是正常权限,Android 6.0及以上版本无需动态申请。
  • 使用System.exit(0)可以确保应用进程完全退出,避免残留后台进程。

内容的提问来源于stack exchange,提问作者Omar Almasoodi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:07:32