首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动install to install apk后出现解析错误

启动install to install apk后出现解析错误
EN

Stack Overflow用户
提问于 2020-09-29 20:14:55
回答 1查看 215关注 0票数 0

所以我有一个下载并安装apk的函数。当intent启动时,我得到“解析这个包时出现问题”。错误。但是,如果我尝试手动安装它,它工作得很好。

DownloadActivity.java:

代码语言:javascript
复制
public void onClickUpdate(View view) throws IOException {
        Toast.makeText(SettingsActivity.this, "Checking for updates", Toast.LENGTH_SHORT).show();
        OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(10,TimeUnit.SECONDS).readTimeout(10,TimeUnit.SECONDS).build();
        final Request request=new Request.Builder().url("theurl").addHeader("version",version).get().build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                try  {

                    File sdcard=new File("sdcard/Download");
                    File file=new File(sdcard,"app-debug.apk");
                    file.createNewFile();
                    BufferedSink sink=Okio.buffer(Okio.sink(file));
                    sink.writeAll(Objects.requireNonNull(response.body()).source());
                    sink.close();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(SettingsActivity.this, "Installed successfully!", Toast.LENGTH_LONG).show();
                            try{
                            Intent intent=new Intent(Intent.ACTION_VIEW);
                            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                            Uri uri=Uri.parse("content://"+"sdcard/Download/app-debug.apk");
                            intent.setDataAndType(uri, "application/vnd.android.package-archive");
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);}catch (Exception e){
                                e.printStackTrace();
                            }
                        }
                    });

                } catch (Exception e) {
                    e.printStackTrace();
                }finally {
                    response.close();
                }
            }
        });
    }

AndroidManifest.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.testapp.test">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

    <application
            android:allowBackup="false"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
        <activity android:name=".VersionActivity">
        </activity>
        <activity android:name=".SettingsActivity">

        </activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

另外,我确实尝试过Android install apk programmatically error - Package Parse error,但那一点帮助都没有。

日志: 2020-09-29 07:31:13.669 24595-29726/?E/ActivityThread:找不到sdcard 2020-09-29 07:31:13.671 24595-29726/的提供商信息?W/InstallStaging:从内容URI下载apk时出错:没有内容提供者: content ://sdcard/java.io.FileNotFoundException/ android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1506) -debug.apk at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1357) at android.content.ContentResolver.openInputStream(ContentResolver.java:1071) at com.android.packageinstaller.InstallStaging$StagingAsyncTask.doInBackground(InstallStaging.java:167) at com.android.packageinstaller.InstallStaging$StagingAsyncTask.doInBackground(InstallStaging.java:161) at android.os.AsyncTask$2.calljava.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) (AsyncTask.java:333)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 16:16:04

我通过添加以下内容修复了这个问题:

代码语言:javascript
复制
StrictMode.VmPolicy.Builder builder=new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure;

我不推荐这样做。请尝试使用content://包装您的文件URI。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64119406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档