2015-12-13 2 views
0

Я делаю приложение для Android, и я делаю функцию об обновлении.Почему я не могу установить .apk после его загрузки

загрузить файл .apk и использовать намерение установить it.But всегда есть ошибка, как «возникла проблема при анализе пакета»

мой код

я использовать приемник для слушать действие, когда загрузка завершена, код

private BroadcastReceiver mBroadcaseReceiver; 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
mCheckUpdateBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("AboutUsActivity","check update"); 
      downloadApk(); 
     } 
    }); 
mBroadcaseReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)){ 
       Log.d("aboutusactivity","下载完成"); 
       //下载完毕后安装 
       installApk(); 
      } 
     } 
    }; 
    registerReceiver(mBroadcaseReceiver,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
} 


private void downloadApk() { 
    Log.d("AboutusActivity","update"); 
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse("XXXXXX")); 
    request.setDescription("updating"); 
    request.setTitle("title"); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     request.allowScanningByMediaScanner(); 
     request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
    } 
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "yuedong.apk"); 

    // 获得下载服务和队列文件 
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
    manager.enqueue(request); 
} 

private void installApk() { 
    Intent mIntent = new Intent(Intent.ACTION_VIEW); 
    mIntent.setDataAndType(Uri.fromFile(new File(Environment.DIRECTORY_DOWNLOADS,"yuedong.apk")), 
      "application/vnd.android.package-archive"); 
    this.startActivity(mIntent); 
} 

Но это всегда как error Так что же случилось с моим кодом?

+0

это может происходить по нескольким причинам. попробуйте установить apk с помощью adb install - это выведет более конкретное сообщение о том, что происходит не так –

+0

@GilMoshayof, когда я открываю .apk по уведомлению или открываю его в диспетчере файлов, я могу установить .apk success – PPTing

+0

у вас есть разрешение INSTALL_PACKAGES в вашем приложении? –

ответ

0

Теперь я знаю причину , потому что мой путь, который скачивает apk, не соответствует пути, который я выбираю для установки apk. так глупо. i меняю это как

private void downloadApk(String url) { 
    Log.d(TAG,"download"); 
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 
    request.setDescription("updating"); 
    request.setTitle("My app"); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     request.allowScanningByMediaScanner(); 
     request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); 
    } 
    request.setDestinationInExternalPublicDir("/xxx/","update.apk"); 
    // 获得下载服务和队列文件 
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
    manager.enqueue(request); 
} 

private void installApk() { 
    File mFile; 
    mFile = new File(Environment.getExternalStorageDirectory()+"/xxx/update.apk"); 
    if (mFile.exists()){ 
     Intent mIntent = new Intent(Intent.ACTION_VIEW); 
     mIntent.setDataAndType(Uri.parse("file://"+mFile.getAbsolutePath()), 
       "application/vnd.android.package-archive"); 
     startActivity(mIntent); 
    }else { 
     Log.d(TAG,"the file is not exist"); 
    } 

} 
0

Файл приложения .apk, который вы загрузили, может быть поврежден. Если вы попытаетесь установить поврежденные приложения, вы получите ошибку синтаксического анализа «Была проблема с разбором пакета». Итак, попробуйте снова полностью загрузить приложение и установить его.

+1

, но когда я открываю его по уведомлению или открываю Диспетчер файлов, я могу установить успех .apk, я думаю, что проблема не в том, что приложение было повреждено. – PPTing

+0

затем следуйте за комментарием Gil Moshayof. –

0

Возможно, это связано с тем, что этот файл имеет конфиденциальную защиту (разрешение доступа) .Try this ссылка.

Смежные вопросы