2017-07-10 143 views
1

我試圖安裝我已經下載到下載文件夾中的Android 7Xamarin的Android 7+安裝APK編程

我已經嘗試使用了一些StackOverflow的職位推薦的方式,在這裏https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en .apk文件一個FileProvider:

File file = new File(fileUri); 
//using Android.Support.V4.Content; 
var downloadUri = FileProvider.GetUriForFile(context,context.ApplicationContext.PackageName + ".com.package.name.provider", file); 
Intent install = new Intent(Intent.ActionInstallPackage); 
install.AddFlags(ActivityFlags.GrantReadUriPermission); 
install.AddFlags(ActivityFlags.GrantWriteUriPermission); 
install.AddFlags(ActivityFlags.GrantPersistableUriPermission); 
install.SetDataAndType(downloadUri, "application/vnd.android.package-archive"); 
context.StartActivity(install); 

AndroidManifest.xml中

<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 
<application android:label="Settings" android:icon="@drawable/Icon" android:theme="@style/myTheme"> 
    <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="${applicationId}.com.package.name.provider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/provider_paths"/> 
    </provider> 
</application> 

provider_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="external_files" path="." /> 
</paths> 

的 「downloadUri」 的模樣:「內容://com.package.name.com.package.name.provider/external_files/Download/Sensors%2520Multitool_1.3.0_apk-dl​​.com.apk

彈出安裝窗口時的錯誤爲:」解析包「時出現問題。

我已經在下載文件夾中點擊安裝了這個軟件包,它安裝的很好,我也嘗試了其他.apk的相同的問題。

+0

不是一個有保證的解決方案,但也許你正在下載Android的Android版本,因此導致解析異常。你有任何可能檢查這個? –

+0

我已經檢查過apk安裝,只需在下載文件夾中單擊它即可安裝並正確運行。 –

+0

@IulianPopescu你可能會嘗試另一種.apk「es文件資源管理器」來測試它是否會起作用,它確實如此,你知道爲什麼爲不同的android版本構建的應用程序不起作用嗎? –

回答

0

看來,解析包的問題是由於包名「傳感器%2520Multitool_1.3.0_apk-dl​​.com.apk」的空間。

一旦空間被刪除,包裝安裝正確。

2
File file = new File(fileUri); 
if(Build.VERSION.SdkInt >= Build.VERSION_CODES.N) { 
    Uri apkUri = FileProvider.GetUriForFile(context, context.ApplicationContext.PackageName + ".provider", toInstall); 
    Intent intentS = new Intent(Intent.ActionInstallPackage); 
    intentS.SetData(apkUri); 
    intentS.SetFlags(ActivityFlags.GrantReadUriPermission); 
    context.StartActivity(intentS); 
} else { 
    Uri apkUri = Uri.FromFile(toInstall); 
    Intent intentS = new Intent(Intent.ActionView); 
    intentS.SetDataAndType(apkUri, "application/vnd.android.package-archive"); 
    intentS.SetFlags(ActivityFlags.NewTask); 
    context.StartActivity(intentS); 
} 
+1

謝謝你的迴應,但目前我只針對Android 7+設備。一旦轉換成Xamarin,我相信這個代碼和我的一樣。 –