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
相关产品推荐
相关产品推荐

