下载并安装apk却弹出错误:“解析包时出现问题”

wangjiuzhou_123 2016-04-13 12:12:56

public class EX097 extends Activity
{
private TextView mTextView01;
private EditText mEditText01;
private Button mButton01;
private static final String TAG = "DOWNLOADAPK";
private String currentFilePath = "";
private String currentTempFilePath = "";
private String strURL="";
private String fileEx="";
private String fileNa="";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mTextView01 = (TextView)findViewById(R.id.myTextView1);
mButton01 = (Button)findViewById(R.id.myButton1);
mEditText01 =(EditText)findViewById(R.id.myEditText1);

mButton01.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
/* 文件会下载至local端 */
mTextView01.setText("正在下载中...");
strURL = mEditText01.getText().toString();
/*取得欲安装程序之文件名称*/
fileEx = strURL.substring(strURL.lastIndexOf(".")
+1,strURL.length()).toLowerCase();
fileNa = strURL.substring(strURL.lastIndexOf("/")
+1,strURL.lastIndexOf("."));
getFile(strURL);
}
}
);

mEditText01.setOnClickListener(new EditText.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
mEditText01.setText("");
mTextView01.setText("远程安装程序,请输入URL");
}
});
}
/* 处理下载URL文件自定义函数 */
private void getFile(final String strPath) {
try
{
if (strPath.equals(currentFilePath) )
{
getDataSource(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable()
{
public void run()
{
try
{
getDataSource(strPath);
}
catch (Exception e)
{
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
}
catch(Exception e)
{
e.printStackTrace();
}
}

/*取得远程文件*/
private void getDataSource(String strPath) throws Exception
{
if (!URLUtil.isNetworkUrl(strPath))
{
mTextView01.setText("错误的URL");
}
else
{
/*取得URL*/
URL myURL = new URL(strPath);
/*创建连接*/
URLConnection conn = myURL.openConnection();
conn.connect();
/*InputStream 下载文件*/
InputStream is = conn.getInputStream();
if (is == null)
{
throw new RuntimeException("stream is null");
}
/*创建临时文件*/
File myTempFile = File.createTempFile(fileNa, "."+fileEx);

/*取得站存盘案路径*/
currentTempFilePath = myTempFile.getAbsolutePath();
/*将文件写入暂存盘*/
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do
{
int numread = is.read(buf);
if (numread <= 0)
{
break;
}
fos.write(buf, 0, numread);
}while (true);

/*打开文件进行安装*/
openFile(myTempFile);
try
{
is.close();
}
catch (Exception ex)
{
Log.e(TAG, "error: " + ex.getMessage(), ex);
}
}
}

/* 在手机上打开文件的method */
private void openFile(File f)
{
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);

/* 调用getMIMEType()来取得MimeType */
String type = getMIMEType(f);
/* 设置intent的file与MimeType */
intent.setDataAndType(Uri.fromFile(f),type);
startActivity(intent);
}

/* 判断文件MimeType的method */
private String getMIMEType(File f)
{
String type="";
String fName=f.getName();
/* 取得扩展名 */
String end=fName.substring(fName.lastIndexOf(".")
+1,fName.length()).toLowerCase();

/* 依扩展名的类型决定MimeType */
if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||
end.equals("xmf")||end.equals("ogg")||end.equals("wav"))
{
type = "audio";
}
else if(end.equals("3gp")||end.equals("mp4"))
{
type = "video";
}
else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||
end.equals("jpeg")||end.equals("bmp"))
{
type = "image";
}
else if(end.equals("apk"))
{
/* android.permission.INSTALL_PACKAGES */
type = "application/vnd.android.package-archive";
}
else
{
type="*";
}
/*如果无法直接打开,就跳出软件列表给用户选择 */
if(end.equals("apk"))
{
}
else
{
type += "/*";
}
return type;
}

/*自定义删除文件方法*/
private void delFile(String strFileName)
{
File myFile = new File(strFileName);
if(myFile.exists())
{
myFile.delete();
}
}

/*当Activity处于onPause状态时,更改TextView文字状态*/
@Override
protected void onPause()
{
mTextView01 = (TextView)findViewById(R.id.myTextView1);
mTextView01.setText("下载成功");
super.onPause();
}

/*当Activity处于onResume状态时,删除临时文件*/
@Override
protected void onResume()
{
// TODO Auto-generated method stub
/* 删除临时文件 */
delFile(currentTempFilePath);
super.onResume();
}
}
代码如上!
哪位大神帮忙分析一下!
...全文
1208 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_15604727 2017-04-11
  • 打赏
  • 举报
回复
解决了吗?我也碰到了
zhuobattle 2016-04-13
  • 打赏
  • 举报
回复
你把手机连上电脑,然后测试安装看下,看看logcat有没有输出。
lilei963322558 2016-04-13
  • 打赏
  • 举报
回复
好像不同版本的android打开文件的方式也不一样
qq_26763799 2016-04-13
  • 打赏
  • 举报
回复
那就是下载的包不完整,对比下下载下来的安装包大小和服务器上的 自己写的文件流下载可能出现丢包啥的,建议用三方的吧,什么XUtils,okhttp,volley这类的
wangjiuzhou_123 2016-04-13
  • 打赏
  • 举报
回复
没有错误!程序能下载文件 只是执行到最后 startActivity(intent); 是出现“解析错误”

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧