Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测到internet连接时下载数据_Android_Broadcastreceiver_Download - Fatal编程技术网

Android 检测到internet连接时下载数据

Android 检测到internet连接时下载数据,android,broadcastreceiver,download,Android,Broadcastreceiver,Download,只要互联网连接可用,我想下载一些数据,包括json和图像(二进制数据) 我有一个完整的工作代码可以做到这一点。问题是我已经在自定义应用程序类中编写了该代码。下载并在本地保存。但当应用程序启动时,互联网连接可能在该时间点不可用 所以我想做的是在检测到internet连接时发送请求并下载数据,并通过将数据保存在本地内容提供商中来使用这些数据。即使没有互联网连接,该应用程序也能正常工作 我正在考虑使用广播接收器下载同样的内容。但是,对于广播接收器来说,下载数据将是一项繁重的任务。所以现在我发现我可以在

只要互联网连接可用,我想下载一些数据,包括json和图像(二进制数据)

我有一个完整的工作代码可以做到这一点。问题是我已经在自定义应用程序类中编写了该代码。下载并在本地保存。但当应用程序启动时,互联网连接可能在该时间点不可用

所以我想做的是在检测到internet连接时发送请求并下载数据,并通过将数据保存在本地内容提供商中来使用这些数据。即使没有互联网连接,该应用程序也能正常工作

我正在考虑使用广播接收器下载同样的内容。但是,对于广播接收器来说,下载数据将是一项繁重的任务。所以现在我发现我可以在广播接收器中检查互联网连接,我将从其他组件下载数据。这样做的最佳实践是什么

即使应用程序未打开,广播接收器是否仍在附近

这样做的最佳实践是什么

最好的方法是使用

从您的广播接收器启动此服务。通过,所有请求都在一个工作线程上处理——它们可能需要花费必要的时间(并且不会阻塞应用程序的主循环),因此不必担心任务需要多长时间

即使应用程序未打开,广播接收器是否仍在附近

是的,如果他们是通过舱单注册的


有用的资源包括

  • 这样做的最佳实践是什么

    最好的方法是使用

    从您的广播接收器启动此服务。通过,所有请求都在一个工作线程上处理——它们可能需要花费必要的时间(并且不会阻塞应用程序的主循环),因此不必担心任务需要多长时间

    即使应用程序未打开,广播接收器是否仍在附近

    是的,如果他们是通过舱单注册的


    有用的资源包括


  • 在android开发者指南中提到,您可以

    第一个-您创建了一个NetworkChangeReceiver类,该类是BroadCastReceive,您可以在其中实现代码以下载所需内容:

    public class NetworkChangeReceiver extends BroadcastReceiver {
    
    @Override
    public void onReceive(final Context context, final Intent intent) {
    
        final ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
    
        final NetworkInfo wifi = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    
        NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo(); 
    
        boolean isConnected = wifi != null &&   
                    wifi.isConnected() ;
    
        if (isConnected ) {
            // Do something
    
            Log.d("Netowk Available ", "Flag No 1");
        }
      }
    }
    
    第二个-您在清单文件中注册您的
    BroadCastReceiver
    ,如下所示:

     <receiver android:name=".NetworkChangeReceiver" >
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    
                </intent-filter>
     </receiver>
    

    在android开发者指南中提到,您可以

    第一个-您创建了一个NetworkChangeReceiver类,该类是BroadCastReceive,您可以在其中实现代码以下载所需内容:

    public class NetworkChangeReceiver extends BroadcastReceiver {
    
    @Override
    public void onReceive(final Context context, final Intent intent) {
    
        final ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
    
        final NetworkInfo wifi = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    
        NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo(); 
    
        boolean isConnected = wifi != null &&   
                    wifi.isConnected() ;
    
        if (isConnected ) {
            // Do something
    
            Log.d("Netowk Available ", "Flag No 1");
        }
      }
    }
    
    第二个-您在清单文件中注册您的
    BroadCastReceiver
    ,如下所示:

     <receiver android:name=".NetworkChangeReceiver" >
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    
                </intent-filter>
     </receiver>
    
    
    
    我应该使用哪个权限?我应该使用哪个权限?