2017-05-14 4 views
1

Ich entwickle eine Android-Anwendung. In meiner Anwendung suche ich nach einer neuen Version der neuesten apk in MainActivity. Wenn die Anwendung aktualisiert werden muss, lade ich einfach die apk-Datei mit Retrofit vom Server herunter und fordere den Benutzer auf, die heruntergeladene apk-Datei zu installieren. Der gesamte Download-Prozess wurde ohne Probleme ausgeführt. Aber ich habe ein Problem mit der Aufforderung an den Benutzer. Ich folgte this link.Kann nicht aufgefordert werden, apk-Datei in Android zu installieren

Dies ist, wie ich in MainActivity prompt

public void promptToInstallDownloadedApk(String path) 
    { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.fromFile(new File(path)), "application/com.football.waiyanhein.tonightfootballreport"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 

Wenn ich den Code ausführen, es diesen Fehler wirft.

.354 12750-12750/com.football.waiyanhein.tonightfootballreport E/Android Runtime: fatal EXCEPTION: main Prozess: com.football.waiyanhein.tonightfootballreport, PID: 12750 android.content.ActivityNotFoundException: Nein Aktivität gefunden für Absicht {act = android.intent.action.VIEW dat = file: ///storage/emulated/0/Android/data/com.football.waiyanhein.tonightfootballreport/files/tonight_football_report.apk typ = application/com.football.waiyanhein.tonightfootballreport flg = 0x10000000} bei android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1798) bei android.app.Instrumentation.execStartActivity (Instrumentation.java:1512) bei android.app.Activity.startActivityForResult (Activity.java:3917) bei android.support.v4.app.BaseFragmentActivityJB.startActivityForResult (BaseFragmentActivityJB.java:48) bei android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:77) bei android.app.Activity.startActivityForResult (Activity.java:3877) unter android.suppor t.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:859) bei android.app.Activity.startActivity (Activity.java:4200) bei android.app.Activity.startActivity (Activity.java:4168) at com.football.waiyanhein.tonightfootballreport.MainActivity.promptToInstallDownloadedApk (MainActivity.java:912) bei com.football.waiyanhein.tonightfootballreport.MainActivity.writeApkDownloadResponseBodyToDisk (MainActivity.java:893) bei com.football.waiyanhein.tonightfootballreport .MainActivity $ 15.onResponse (MainActivity.java:850) um re trofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall $ 1 $ 1.run (ExecutorCallAdapterFactory.java:68) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (native Methode) um com. android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) 05-14 04:19:18.359 679-1124/system_process W/ActivityManager: Force Veredlungsaktivität com.football.waiyanhein.tonightfootballreport/.MainActivity 05-14 04: 19: 18.387 664-664 /? E/EGL_emulation: tid 664: eglCreateSyncKHR (1215): Fehler 0x3004 (EGL_BAD_ATTRIBUTE) 05-14 04: 19: 18,505 679-10967/system_process I/OpenGLRenderer: Initialized EGL, Version 1,4

kann Warum frage ich nicht? Ich setze "application/com.football.waiyanhein.tonightfootballreport" um zu promoten. Das ist mein Paketname.

Ich habe das auch versucht, aber es funktioniert nicht.

public void promptToInstallDownloadedApk(String path) 
    { 
     Intent promptInstall = new Intent(Intent.ACTION_VIEW) 
       .setDataAndType(Uri.parse(path), 
         "application/vnd.android.package-archive"); 
     startActivity(promptInstall); 
    } 
+0

sollte '„application/vnd.android.package-Archiv“sein' 100% Verwendung dieses und postest den Fehler, den Sie bekommen, ist dies eigentlich nicht ur Paket sein Name., kann da etwas mit dem 'Pfad' nicht stimmen? – Yazan

Antwort

1

Das letzte Beispiel sollte funktionieren. Ich verwende es wie folgt aus:

File updatedApk = new File(Environment.getExternalStorageDirectory(), 
         "your_file_name"); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(updatedApk), 
     "application/vnd.android.package-archive"); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
+0

Ja. Das hat funktioniert. Ich habe nur Uri.fromFile benutzt. Vielen Dank. –

Verwandte Themen