下载网页并在连接可用时刷新它

时间:2014-08-26 13:02:44

标签: javascript android html ios phonegap-build

所以我正在构建一个包含大量网页内容的应用程序,我打算使用Phone Gap版本发布它,但会在线托管所有内容并链接到它。我想知道是否有一种方法可以在有用于离线使用的活动互联网连接时以及当用户使用wifi连接时再次连接以便刷新数据时可以下载网页。该网站主要是html,js和php。我将主持bluehost

有没有办法做到这一点?提前致谢! Littleswany!

3 个答案:

答案 0 :(得分:2)

我不熟悉java,但我认为我可以提供完成工作的逻辑。

你想做一个无限循环来检查用户是否在wifi上。然后,如果为true,请使用wget,rsync或scp下载该网站。像这样的东西。:

while (true){
    // do an if statement that checks if user is on wifi. Then do a then statement that uses rsync or wget. 
}

有关如何在java中的while循环中嵌套if语句的信息:java loop, if else

我不知道是否可以从java运行wget,rsync或scp。您需要更多地了解它或编写自己的替代函数来完成它。类似的东西:

function download_file() {
       var url = "http://www.example.com/file.doc"
       window.location = url;
     }

你应该可以从你的java这样做:

String whatToRun = "/usr/local/bin/wget http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe";

来源: 1. What is the equivalent of wget in javascript to download a file from a given url? 2. Call a command in terminal using Java (OSX)

答案 1 :(得分:2)

首先创建一个连接过滤器类

public class Connection_Status{
    private static ConnectivityManager connectivityManager;
    static boolean connected = false;

    public static Boolean isOnline(Context ctx) {
        try {
            connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            connected = networkInfo != null && networkInfo.isAvailable()&& networkInfo.isConnected();
            return connected;
        } catch (Exception e) {
            System.out.println("CheckConnectivity Exception: " + e.getMessage());
        }
        return connected;
    }
}

在你的主课堂

    public class Main extends Activity{
       private WebView mWebView;

      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

       mWebView = (WebView) findViewById(R.id.webview);
       mWebView.getSettings().setJavaScriptEnabled(true);
       mWebView.getSettings().setBuiltInZoomControls(true);

if(Connection_Status.isOnline(Main.this)){

    HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client
    HttpGet httpget = new HttpGet("http://yoururl.com"); // Set the action you want to do
    HttpResponse response = httpclient.execute(httpget); // Executeit
    HttpEntity entity = response.getEntity(); 
    InputStream is = entity.getContent(); // Create an InputStream with the response
    BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) // Read line by line
        sb.append(line + "\n");

    String resString = sb.toString(); //

    is.close(); // Close the stream
             }
        }
   }

或者您可以使用缓存,例如

       mWebView.getSettings().setAppCacheMaxSize(1024*1024*8);
       mWebView.getSettings().setAppCachePath(""+this.getCacheDir());
       mWebView.getSettings().setAppCacheEnabled(true); 
       mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 

不要忘记添加以下权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- for the connection status-->

来源:  https://stackoverflow.com/a/6503817/1309629

答案 2 :(得分:2)

PhoneGap应用程序从商店下载后会下载到设备上。它们基本上是index.html文件的包装器,但应用程序实际上是用JavaScript编写的,它负责创建和显示视图等。你需要检查互联网连接的唯一时间就是当你与你的后面进行通信时结束(PHP)...如果ajax请求失败,最好的解决方案是为用户提供一个按钮/链接,以便在他们重新获得互联网连接时再次尝试,或者设置一个间歇性触发的计时器以继续尝试。 。永远不要在你的手机差距应用程序中使用while(true)循环 - 它会挂起。