嗨,两周后,我开始研究并努力解决这个错误* 解析错误: *解析包时出现问题。
我的实现范围是我试图从我有更新的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);
}
答案 0 :(得分:3)
最后我能够安装我的apk从我的服务器下载而没有任何Parse Error.I尝试使用外部存储它发生没有任何错误。将apk存储在内部存储中并想要安装意味着你需要更改你的
FileOutputStream fos = openFileOutput(file, Context.MODE_PRIVATE)
Context.MODE_WORLD_READABLE 。我添加了 INSTALL_PACKAGES 等权限。