0

これは私の最初の投稿です。そのため、コードの書式設定に関してすべてが正しく行われていることを願っています。

多分あなたは次の問題で私を助けることができます:

API レベル 10 以降では、すべての HttpURLConnections が正常に機能していますが、API レベル 8 では、ファイル (txt、html など) のコンテンツをダウンロードしようとする試みの一部 (またはほとんど) が失敗します。

サーバーが応答コード「-1」を返すたびにダウンロードを繰り返すことで、この問題を回避しました。これはあまり満足のいくものではありませんが、機能します (多かれ少なかれ) - しかし、私が受け取るコンテンツが非常に短い (最大 100 文字) という事実のためにのみ機能すると思います - そして時々、最後のいくつかの文字が省略されたと思います.それも。

しかし今、更新ルーチン (apk ファイルのダウンロードとインストール) を実装しようとしましたが、apk ファイルが断片化されているため (おそらく)、ほとんどの場合失敗します。そのため、ファイルをインストールしようとすると「解析エラー」が発生します。 .

私は何を間違っていますか?

助けてくれてありがとう(そして、あなたが私よりも優れている場合は友好的であり続けてくださいg)!

これが私の更新ルーチンのコードです (ご覧のとおり、上記の繰り返しメカニズムはありません)。

    String download_url  = "http://url/";
    String download_file = "name.apk";

    //Local
    String update_file = download_file;
    File update_file_stream = context.getFileStreamPath(update_file);

    //Connect
    URL url = new URL(download_url + download_file);
    HttpURLConnection c = (HttpURLConnection) url.openConnection();
    c.setRequestMethod("GET");
    c.setDoOutput(true);
    c.connect();

    //Delete local File?
    if(update_file_stream.exists()){

        update_file_stream.delete();
    }

    //Download File
    FileOutputStream fos = context.openFileOutput(update_file, Context.MODE_WORLD_READABLE);
    InputStream is = c.getInputStream();
    byte[] buffer = new byte[4096];
    int len1 = 0;
    while ((len1 = is.read(buffer)) != -1) {
        fos.write(buffer, 0, len1);
    }
    fos.close();
    is.close();

    //Install
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(update_file_stream), "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
4

1 に答える 1

0

メインスレッドの問題のネットワークのように見えます。

以前の Android SDK バージョン (おそらく 8) では、メイン スレッドでいくつかのネットワークを実行できます。

しかし、ICS や Honeycomb の後では、メイン スレッドでネットワーク関連の操作を行うことはできません。

于 2013-02-24T11:18:21.353 に答える