在 android 中共享 apk

Sharing apk in android

我正在尝试借助按钮共享 apk,它在昨天之前工作正常,但现在当我按下共享 apk 按钮时,应用程序崩溃了,我不知道它出了什么问题,但在运行 选项卡显示下面 java 代码的最后一行有问题。

这是java代码


    btnShareApk.setOnClickListener (new View.OnClickListener ( ) {
                @Override
                public void onClick(View v) {
                    ApplicationInfo applicationInfo = getApplicationContext ().getApplicationInfo ();
                    String apkPath = applicationInfo.sourceDir;
                    Intent intent2 = new Intent (Intent.ACTION_SEND);
                    intent2.setType ("application/vnd.android.package-archive");
                    intent2.putExtra (Intent.EXTRA_STREAM, Uri.fromFile (new File (apkPath) ));
                    startActivity (Intent.createChooser (intent2,"Share Apk via"));
                }
            });

这是xml代码

<Button
            android:id="@+id/btnShareApk"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:layout_marginStart="10dp"
            android:background="@drawable/rounded_button_green"
            android:text="Share Apk"

            android:textColor="@color/colorAccent"
            android:textSize="20sp"
            android:textStyle="bold" />

这是来自 运行 选项卡的日志

    Process: com.faisalnazir.computerapplications, PID: 6184
    android.os.FileUriExposedException: file:///data/app/com.faisalnazir.computerapplications-mLlY2QJaNLHfnA_i9z-hoQ%3D%3D/base.apk exposed beyond app through ClipData.Item.getUri()
        at android.os.StrictMode.onFileUriExposed(StrictMode.java:2083)
        at android.net.Uri.checkFileUriExposed(Uri.java:2388)
        at android.content.ClipData.prepareToLeaveProcess(ClipData.java:977)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:10820)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:10826)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:10805)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1712)
        at android.app.Activity.startActivityForResult(Activity.java:5319)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
        at android.app.Activity.startActivityForResult(Activity.java:5263)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
        at android.app.Activity.startActivity(Activity.java:5648)
        at android.app.Activity.startActivity(Activity.java:5616)
        at com.faisalnazir.computerapplications.ShareActivity.onClick(ShareActivity.java:62)
        at android.view.View.performClick(View.java:7256)
        at android.view.View.performClickInternal(View.java:7218)
        at android.view.View.access00(View.java:824)
        at android.view.View$PerformClick.run(View.java:27719)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:228)
        at android.app.ActivityThread.main(ActivityThread.java:7782)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)

感谢任何形式的帮助

尝试将 apk 文件复制到您的应用程序缓存文件夹,然后使用 FileProvider.getUriForFileFile 解析为 Uri

Link:

https://developer.android.com/reference/androidx/core/content/FileProvider https://developer.android.com/reference/androidx/core/content/FileProvider#GetUri

尝试将其添加到 onCreate

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();

您可以使用 Intent 分享您的应用。喜欢:

Intent sharingIntent = new Intent(intent.ACTION_SEND);