2017-02-19 7 views
-3

У меня есть приложение для веб-просмотра и вы хотите обновить приложение изнутри, когда в URL присутствует определенный текст.Приложение сбой при запуске деятельности

Я зову их в функции shouldOverrideUrlLoading из WebView:

Intent intent = new Intent(getApplicationContext(), Update.class); 
startActivity(intent); 
return true; 

А вот Update.class

public class Update extends MainActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
     String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"; 
     String fileName = "app-file.apk"; 
     destination += fileName; 
     final Uri uri = Uri.parse("file://" + destination); 

     File file = new File(destination); 
     if (file.exists()) 
      file.delete(); 

     DownloadManager.Request request = new DownloadManager.Request(
       Uri.parse(getIntent().getStringExtra("http://example.com/app-file.apk"))); 
     request.setDestinationUri(uri); 
     dm.enqueue(request); 

     final String finalDestination = destination; 
     final BroadcastReceiver onComplete = new BroadcastReceiver() { 
      public void onReceive(Context ctxt, Intent intent) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
        Uri contentUri = FileProvider.getUriForFile(ctxt, BuildConfig.APPLICATION_ID + ".provider", new File(finalDestination)); 
        Intent openFileIntent = new Intent(Intent.ACTION_VIEW); 
        openFileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
        openFileIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        openFileIntent.setData(contentUri); 
        startActivity(openFileIntent); 
        unregisterReceiver(this); 
        finish(); 
       } else { 
        Intent install = new Intent(Intent.ACTION_VIEW); 
        install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        install.setDataAndType(uri, "application/vnd.android.package-archive"); 
        startActivity(install); 
        unregisterReceiver(this); 
        finish(); 
       } 
      } 
     }; 
     registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
    } 
} 

Когда я иду к определенному URL, чтобы начать свою деятельность, то приложение падает , Я хотел бы увидеть любое решение. Благодаря!!

Я РЕШЕН ЭТО, это была ошибка разрешения.

+4

Любой отчет о сбое? – Aryan

+0

Используйте 'adb logcat' для оценки трассировки стека. – Jameson

+4

Мои деньги находятся на 'NullPointerException'. Это всегда * a 'NullPointerException', когда кто-то помещает проблему в метод' onCreate'. –

ответ

0

Я бы предложил вам изучить ADB Logcat, который поможет вам исправить проблему. В противном случае, проверьте в журнале аварии или убедитесь, что вы объявили свой Update активность в Manifest.xml

+0

Как проверить журнал сбоев? Я новичок в этом, поэтому, пожалуйста, направляйте меня. Кроме того, активность объявляется в mainifest.xml – Mustafa

+0

Я обновил вопрос, пожалуйста, смотрите сейчас. – Mustafa

0

Убедитесь, что вы объявляете новый вид деятельности в вашем Android Manifest.xml

попробуйте изменить этот

 Intent intent = new Intent(getApplicationContext(), Update.class); 
     startActivity(intent); 
     return true; 

к этому

Intent intent = new Intent(getApplicationContext(), Update.class); 
startActivity(intent); 
finish(); 
return true; 

Позвольте мне знать, как это пошло.

+0

Да Я добавил активность в Mainifest.xml, и результат будет таким же. Приложение по-прежнему падает после добавления вашего кода :( – Mustafa

+0

проверяет ваш журнал приложений и публикует код из него ... журнал приложений - это маленький ящик, который появляется в нижней части экрана при запуске приложения. – Kennedy

+0

Я не запущен приложение для эмулятора. Устанавливайте его на мобильном телефоне, чтобы не было уверенности в том, как это окно появляется. Можете ли вы рассказать? – Mustafa

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

  • Нет связанных вопросов^_^