安装下载的.apk文件时解析错误

时间:2012-06-21 09:53:32

标签: android android-layout exception-handling

嗨,两周后,我开始研究并努力解决这个错误* 解析错误: *解析包时出现问题。

我的实现范围是我试图从我有更新的apk文件的服务器更新我的应用程序,并通过我的应用程序使用服务下载它。现在在舞台的边缘我可以从该服务器下载文件我可以手动安装它。但是 我的范围就像文件从服务器下载它应该自动调用 安装应用程序弹出窗口。虽然安装这个得到上面的错误。我已经尝试过问这个问题谁在这里问同样的问题。

这是我的代码:

public class Myservice extends Service {
String versionName;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();

}

@Override
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();

}

@Override
public void onStart(Intent intent, int startid) {
    try {
        versionName = getPackageManager().getPackageInfo(getPackageName(),
                0).versionName;
    } catch (NameNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



     DownloadFromUrl();


}

public void DownloadFromUrl() {  //this is the downloader method
      try {
              URL url = new URL("http://61.12.5.34:10140/test/UpateTest.apk");
              String  file ="YeldiUpateTest.apk";

              long startTime = System.currentTimeMillis();

              /* Open a connection to that URL. */
              URLConnection ucon = url.openConnection();

              /*
               * Define InputStreams to read from the URLConnection.
               */
              InputStream is = ucon.getInputStream();
              BufferedInputStream bis = new BufferedInputStream(is);

              /*
               * Read bytes to the Buffer until there is nothing more to read(-1).
               */
              ByteArrayBuffer baf = new ByteArrayBuffer(50);
              int current = 0;
              while ((current = bis.read()) != -1) {
                      baf.append((byte) current);

              }

              /* Convert the Bytes read to a String. */
              FileOutputStream fos = openFileOutput(file, Context.MODE_PRIVATE);
              Log.v("wsd", "write");
              fos.write(baf.toByteArray());
              fos.close();
              Log.d("Download time", "download ready in"
                              + ((System.currentTimeMillis() - startTime) / 1000)
                              + " sec");

              install();
      } catch (IOException e) {
              Log.d("ImageManager", "Error: " + e);
      }
 }

这是我的安装方法():

void install()
{

     File path=getFileStreamPath("UpateTest.apk");

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

1 个答案:

答案 0 :(得分:3)

最后我能够安装我的apk从我的服务器下载而没有任何Parse Error.I尝试使用外部存储它发生没有任何错误。将apk存储在内部存储中并想要安装意味着你需要更改你的

FileOutputStream fos = openFileOutput(file, Context.MODE_PRIVATE)

Context.MODE_WORLD_READABLE 。我添加了 INSTALL_PACKAGES 等权限。