Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android PackageInstaller在无法使用“解决”解决内容提供程序时崩溃;下载「;权威_Android_Xamarin.android_Crash_Android Contentprovider - Fatal编程技术网

Android PackageInstaller在无法使用“解决”解决内容提供程序时崩溃;下载「;权威

Android PackageInstaller在无法使用“解决”解决内容提供程序时崩溃;下载「;权威,android,xamarin.android,crash,android-contentprovider,Android,Xamarin.android,Crash,Android Contentprovider,作为一个背景,我正在用Xamarin为一家企业编写一个Android应用程序,它应该能够自我更新,而不是通过play store。特别是有一个设备无法自我更新,我不知道为什么 更新的代码如下所示: 试试看 { var intent=新intent(intent.ActionInstallPackage); intent.SetFlags(ActivityFlags.NewTask); var file=new Java.IO.file(Android.OS.Environment.Externa

作为一个背景,我正在用Xamarin为一家企业编写一个Android应用程序,它应该能够自我更新,而不是通过play store。特别是有一个设备无法自我更新,我不知道为什么

更新的代码如下所示:

试试看
{
var intent=新intent(intent.ActionInstallPackage);
intent.SetFlags(ActivityFlags.NewTask);
var file=new Java.IO.file(Android.OS.Environment.ExternalStorageDirectory.Path+“/com.mycompany.appname.apk”);
var uri=FileProvider.GetUriForFile(这是“com.mycompany.appname.update\u file\u provider”文件);
GrantUriPermission(“com.google.android.packageinstaller”,uri,ActivityFlags.GrantReadUriPermission);
SetDataAndType(uri,“application/vnd.android.package归档”);
var pendingent=pendingent.GetActivity(this,0,intent,0);
var notification=GetNotificationBuilder(installedVersion、latestVersion、this)
.SetContentText(“下载完成”)
.AddAction(新通知兼容性操作(Resource.Drawable.ic_note_add_black_24dp,“安装”,挂起内容))
.SetAutoCancel(真)
.Build();
NotificationManagerCompat.From(this).Notify(NotificationId,notification);
StopSelf();
}
捕获(例外e)
{
var notification=GetNotificationBuilder(installedVersion、latestVersion、this)
.SetContentText(“未能安装更新:+e.Message”)
.SetAutoCancel(真)
.Build();
NotificationManagerCompat.From(this).Notify(NotificationId,notification);
StopSelf();
返回;
}
当它运行时,我收到一条消息,“PackageInstaller已停止”。stacktrace显示这是由于package installer应用程序中的NPE导致的:

12-02 17:37:17.153  4897  4897 E AndroidRuntime: FATAL EXCEPTION: main
12-02 17:37:17.153  4897  4897 E AndroidRuntime: Process: com.google.android.packageinstaller, PID: 4897
12-02 17:37:17.153  4897  4897 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.packageinstaller/com.android.packageinstaller.InstallStart}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName android.content.pm.ComponentInfo.getComponentName()' on a null object reference
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2785)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2863)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.ActivityThread.-wrap11(Unknown Source:0)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1596)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:164)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6537)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:465)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
12-02 17:37:17.153  4897  4897 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName android.content.pm.ComponentInfo.getComponentName()' on a null object reference
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at com.android.packageinstaller.InstallStart.isSystemDownloadsProvider(InstallStart.java:230)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at com.android.packageinstaller.InstallStart.getOriginatingUid(InstallStart.java:222)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at com.android.packageinstaller.InstallStart.onCreate(InstallStart.java:73)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7023)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7014)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2738)
12-02 17:37:17.153  4897  4897 E AndroidRuntime:        ... 9 more
作为记录:这个特定的设备运行的是安卓8.1。我已经在运行安卓8.0、安卓10和安卓7的其他设备上测试过了,没有问题,但我没有任何其他设备可以测试这个安卓版本

编辑我意识到我应该多解释一下标题。实际上,我已经查看了堆栈跟踪出现的位置,这一行似乎是这个NPE的原因:

final String downloadProviderPackage=getPackageManager().resolveContentProvider(
下载授权,0).getComponentName().getPackageName();

DOWNLOADS\u AUTHORITY
是一个值为
“DOWNLOADS”
的常量字符串,对
resolveContentProvider()
的调用返回null。目前尚不清楚的是,为什么这种情况会发生在这个特定的设备上,而不是其他设备上,或者如何修复它。

问题原来是下载管理器已被禁用。这似乎只是android 8.0和8.1中的一个问题。我仍然不确定它最初是如何被禁用的,但我的解决方案是按照blackapps的建议使用空值检查,并在检测到此情况时提示用户重新启用它。

您可以将该语句添加到自己的代码中以检查空值。如果为空,请不要安装。这可能值得一做,但我也想确保这些手机能够安装此更新。要明确的是,这些设备都是由企业所有并由MDM提供的,因此我猜在提供它们的方式中必须设置一些特定的内容,但我无法想象那会是什么。请你把你的帖子标记为答案,这样其他有类似问题的人可以从你那里得到帮助吗?现在它告诉我需要等待23个小时,但在那之后我一定会这样做。