【问题标题】:Share app through intent but it is not working通过意图共享应用程序但它不起作用
【发布时间】:2020-12-07 15:57:58
【问题描述】:

我正在制作聊天应用程序并想通过 Intent 分享应用程序。解决问题的方法不多,请大家帮忙。这是我的代码,但它在启动活动中引发错误

 navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @SuppressLint("NonConstantResourceId")
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId()){

                case R.id.share :


                    ApplicationInfo api = getApplicationContext().getApplicationInfo();
                    String apkPatch = api.sourceDir;

                    Intent intent = new Intent(Intent.ACTION_SEND);
                    intent.setType("application/vnd.android.package-archive");
                    intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(new File(apkPatch)));
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    startActivity(Intent.createChooser(intent, "ShareVia"));

                    Toast.makeText(NavigationActivity.this, "shareVia", Toast.LENGTH_SHORT).show();
                case R.id.aboutus :
                    Toast.makeText(getApplicationContext(), "aboutUs", Toast.LENGTH_SHORT).show();

            }

            return true;
        }
    });

这是运行屏幕中的错误

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.chatbox, PID: 19897
android.os.FileUriExposedException: file:///data/app/com.example.chatbox-7bck8l1ys2PwFlDmiMFq2w%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:10809)
    at android.content.Intent.prepareToLeaveProcess(Intent.java:10815)
    at android.content.Intent.prepareToLeaveProcess(Intent.java:10794)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1710)
    at android.app.Activity.startActivityForResult(Activity.java:5331)
    at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
    at android.app.Activity.startActivityForResult(Activity.java:5262)
    at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
    at android.app.Activity.startActivity(Activity.java:5660)
    at android.app.Activity.startActivity(Activity.java:5628)
    at com.example.chatbox.NavigationActivity$1.onNavigationItemSelected(NavigationActivity.java:121)
    at com.google.android.material.navigation.NavigationView$1.onMenuItemSelected(NavigationView.java:170)
    at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
    at androidx.appcompat.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:91)
    at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
    at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
    at com.google.android.material.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:352)
    at android.view.View.performClick(View.java:7257)
    at android.view.View.performClickInternal(View.java:7213)
    at android.view.View.access$3800(View.java:828)
    at android.view.View$PerformClick.run(View.java:27921)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:237)
    at android.app.ActivityThread.main(ActivityThread.java:7830)
    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:1040)

I/Process:发送信号。 PID:19897 SIG:9

【问题讨论】:

  • 在google play中分享应用链接更好..

标签: java android android-studio android-fragments apk


【解决方案1】:

问题在于,对于新 API,文件 URI 方案与旧 API 的方案不同。因此,使用 new File(apkPatch) 创建文件会为较新的 API 引发此异常。

因此,您可以将字符串传递给Uri.parse,而不是File 来解决此问题,而不是使用Uri.fromFile

所以替换下面的代码行:

intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(apkPatch)));

与:

intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(apkPatch));

我已经尝试过你的解决方案,效果很好,但是 apk 文件名是 base.apk 但我希望我的应用名称在那里(聊天框)而不是 base

现在要更改 apk 文件名,添加下面的意图

intent.putExtra(Intent.EXTRA_SUBJECT, "Chat Box.apk");

【讨论】:

  • 我已经尝试过你的解决方案,效果很好,但是 apk 文件名是 base.apk 但我希望我的应用程序名称在那里(聊天框)而不是 base
  • @HammasAli 请检查更新的答案..希望它现在可以工作
猜你喜欢
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多