2017-07-10 11 views
1

私は私が使用してStackOverflowのポストの数に推奨される方法を試してみましたが、ここにhttps://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/enているAndroidの7のダウンロードフォルダにXamarinのAndroidは、プログラム的

をダウンロードしたの.apkをインストールしようとしていますAPKをインストール7+ 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

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

210は次のようになります//com.package.name.com.package.name.provider/external_files/Download/Sensors%2520Multitool_1.3.0_apk-dl​​.com.apk "

インストールウィンドウがポップアップするときのエラーは、"パッケージの解析中に問題がありました "です。

私はこのパッケージをダウンロードフォルダに入れてインストールしても問題なくインストールできます。同じ問題で他の.apkも試しました。

+0

保証された解決策ではありませんが、Android Oのapkビルドをダウンロードしているため、解析の例外が発生する可能性があります。これをチェックする可能性はありますか? –

+0

私はapkがダウンロードしたフォルダにあるapkをクリックするだけで、それがインストールされていることを確認しました。これは正しくインストールされて実行されます。 –

+0

@IulianPopescuあなたが何かに乗っている可能性があります。私はまだ別の.apk "esファイルエクスプローラ"を試しました。それがうまくいくかどうかをテストするだけです。なぜ、異なるアンドロイド版のアプリケーションがうまくいかないのか分かりますか? –

答えて

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

ありがとうございますが、現時点ではアンドロイド7+デバイスのみをターゲットにしています。 Xamarinに変換されると、私はこのコードが私のものと同じだと信じています。 –

関連する問題