java - Android: Activity 建立网络连接

标签 java android

我有一个 Activity,它在其 onCreate 方法中从 Web 中查找数据。该 Activity 由用户点击通知激活。因此,常见的问题是用户会快速打开手机、解锁、滑动打开通知、点击通知,并且 Activity 会在手机连接到互联网之前激活。

我确实有一个友好的 AlertDialog 弹出通知用户无法接收数据并在网络连接后重试;但是有没有办法让Activity主动告诉手机连接并检测到连接,然后等待连接建立,然后成功加载它的数据

最佳答案

通常,你会做这样的事情:

@Override
public void onResume(){
    super.onResume();
    // first, check connectivity
    if ( isOnline ){
        // do things if it there's network connection
    }else{
        // as it seems there's no Internet connection
        // ask the user to activate it
        new AlertDialog.Builder(YourActivity.this)
            .setTitle("Connection failed")
            .setMessage("This application requires network access. Please, enable " +
                    "mobile network or Wi-Fi.")
            .setPositiveButton("Accept", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // THIS IS WHAT YOU ARE DOING, Jul
                    YourActivity.this.startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    YourActivity.this.finish();
                }
            })
            .show();
    }
}

这个想法是要求用户去配置网络连接。然后,如果用户确实想要配置它,您将调用 Settings.ACTION_WIRELESS_SETTINGS Intent 。

另外,请注意 isOnline 变量,它是一个 boolean 值,表示是否存在网络连接。为了设置该变量,您可以使用这样的外部简单类:

public class CheckConnectivity {
    public static boolean isOnline(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if( cm == null )
            return false;
        NetworkInfo info = cm.getActiveNetworkInfo();
        if( info == null )
            return false;
        return info.isConnectedOrConnecting();
    }
}

此外,您还必须将此权限添加到您的 AndroidManifest.xml 文件中:

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

关于java - Android: Activity 建立网络连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325915/

相关文章:

java - 使用 Runtime.exec 处理 i/o 流

安卓动画问题

android:scheme 在我的设备上不工作

java - fragment 不兼容的类型错误

Java - 将子类传递给类型为父类(super class)的构造函数

java - CDI 注入(inject)未在 Jackson 序列化程序中解决

android - 使用带有 addValueEventListener 的查询

java - 如果线程只能访问具有自己实例(由不同线程创建)的类的静态方法,那么它将在哪个线程上执行?

java - java.lang.Package.getDeclaredAnnotations 上 UnsatisfiedLinkError 的极其简化的测试用例

java - 错误org.springframework.beans.factory.BeanCreationException : Error creating bean Spring Boot