2012-08-26 44 views
1

我試圖從外部apk文件啓動活動。 apk文件是一個簡單的文本顯示,我從URL下載到/ mnt/sdcard /中的本地掛載目錄中。一切工作正常到這一點。 現在,我想從該文件開始一個活動,並且出現錯誤。兩種類型,取決於意圖的建設。下面是與關聯的LogCat的兩個實現,'targetFilePath'是相同的。 案例一:從apk文件開始活動

try { 
    Intent install = new Intent(Intent.ACTION_VIEW) 
    .setData(Uri.fromFile(new File(targetFilePath))) 
    .setType("application/vnd.android.package-archive"); 
    startActivity(install); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
    Toast.makeText(DownloadFile.this, "apk file launch error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
} 

的logcat的:

08-26 17:03:02.153: I/ActivityManager(59): Starting activity: Intent { act=android.intent.action.VIEW typ=application/vnd.android.package-archive } 
08-26 17:03:02.153: W/System.err(390): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=application/vnd.android.package-archive } 
08-26 17:03:02.162: W/System.err(390): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408) 
08-26 17:03:02.162: W/System.err(390): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 
08-26 17:03:02.162: W/System.err(390): at android.app.Activity.startActivityForResult(Activity.java:2817) 
08-26 17:03:02.162: W/System.err(390): at android.app.Activity.startActivity(Activity.java:2923) 
08-26 17:03:02.162: W/System.err(390): at com.agorasoft.sandbox.DownloadFile$1.onClick(DownloadFile.java:137) 
08-26 17:03:02.162: W/System.err(390): at android.view.View.performClick(View.java:2408) 
08-26 17:03:02.172: W/System.err(390): at android.view.View$PerformClick.run(View.java:8816) 
08-26 17:03:02.172: W/System.err(390): at android.os.Handler.handleCallback(Handler.java:587) 
08-26 17:03:02.172: W/System.err(390): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-26 17:03:02.172: W/System.err(390): at android.os.Looper.loop(Looper.java:123) 
08-26 17:03:02.182: W/System.err(390): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-26 17:03:02.182: W/System.err(390): at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 17:03:02.182: W/System.err(390): at java.lang.reflect.Method.invoke(Method.java:521) 
08-26 17:03:02.182: W/System.err(390): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-26 17:03:02.182: W/System.err(390): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-26 17:03:02.182: W/System.err(390): at dalvik.system.NativeStart.main(Native Method) 
08-26 17:03:21.761: D/SntpClient(59): request time failed: java.net.SocketException: Address family not supported by protocol 

案例二:

try { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    Uri apkUri = Uri.fromFile(new File(targetFilePath)); 
    intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); 
    startActivity(intent); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
    Toast.makeText(DownloadFile.this, "apk file launch error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
} 

解析錯誤彈出窗口:有解析包

問題

The LogCat:

08-26 17:09:48.862: W/PackageParser(329): Unable to read AndroidManifest.xml of /mnt/sdcard/Downloads/ApkTest.apk 
08-26 17:09:48.862: W/PackageParser(329): java.io.FileNotFoundException: AndroidManifest.xml 
08-26 17:09:48.862: W/PackageParser(329): at android.content.res.AssetManager.openXmlAssetNative(Native Method) 
08-26 17:09:48.862: W/PackageParser(329): at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:485) 
08-26 17:09:48.862: W/PackageParser(329): at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:453) 
08-26 17:09:48.862: W/PackageParser(329): at android.content.pm.PackageParser.parsePackage(PackageParser.java:396) 
08-26 17:09:48.862: W/PackageParser(329): at com.android.packageinstaller.PackageUtil.getPackageInfo(PackageUtil.java:79) 
08-26 17:09:48.862: W/PackageParser(329): at com.android.packageinstaller.PackageInstallerActivity.onCreate(PackageInstallerActivity.java:242) 
08-26 17:09:48.862: W/PackageParser(329): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-26 17:09:48.862: W/PackageParser(329): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
08-26 17:09:48.862: W/PackageParser(329): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-26 17:09:48.862: W/PackageParser(329): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-26 17:09:48.862: W/PackageParser(329): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-26 17:09:48.862: W/PackageParser(329): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-26 17:09:48.862: W/PackageParser(329): at android.os.Looper.loop(Looper.java:123) 
08-26 17:09:48.862: W/PackageParser(329): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-26 17:09:48.862: W/PackageParser(329): at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 17:09:48.862: W/PackageParser(329): at java.lang.reflect.Method.invoke(Method.java:521) 
08-26 17:09:48.862: W/PackageParser(329): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-26 17:09:48.862: W/PackageParser(329): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-26 17:09:48.862: W/PackageParser(329): at dalvik.system.NativeStart.main(Native Method) 
08-26 17:09:48.862: W/PackageInstaller(329): Parse error when parsing manifest. Discontinuing installation 
08-26 17:09:49.902: I/ActivityManager(59): Displayed activity com.android.packageinstaller/.PackageInstallerActivity: 1168 ms (total 1168 ms) 

對不起,冗長的參數,但它似乎很奇怪,首先,它不起作用,然後我有意圖/安裝定義的兩種語法不同的行爲。 調用應用程序和apk文件都具有相同的SDK目標/分鐘版本。調用應用程序清單中沒有爲這段代碼設置特殊權限(我是否需要任何?)。 感謝

+2

第二種情況似乎是正確的,但是您下載的apk文件已損壞,這就是爲什麼它會崩潰 – nandeesh

+0

謝謝nandeesh。下載的文件確實損壞了,我無法想象它是由此產生的,但是一個簡單的cmp檢查立即啓動了它。 –

回答

2

該文檔握住你的答案:Intent.setType

這是用來創建意圖是只能指定一個類型,而不是數據,例如指示數據返回的類型。

該方法自動清除先前設置的任何數據(例如setData(Uri))。

併爲Intent.setDataAndType

此方法的文檔應該很少使用 - 它可以讓你重寫通常會從數據這裏給出自己的類型推斷的MIME類型。

簡而言之,在構造此意圖時不需要指定類型,它將根據給定URI的數據本身來推斷。

所有這一切說,似乎nandeesh的評論是正確的 - 你試圖安裝的軟件包看起來腐敗。同樣值得注意的是,如果您打算將此應用發佈到Play商店,那麼開發者協議將不允許下載或安裝其他應用的應用。

+0

感謝adamp,明確而有用! –

+0

嘿adamp你能幫我解決這個問題:http:// stackoverflow。COM /問題/ 13412041 /如何對捕獲和日誌或-A-敬酒事件,在最先進的-DO-U-想安裝的個 – Loshi