2017-08-24 73 views
0

这种共享的音频文件是我的代码:使用意图

Intent share = new Intent(Intent.ACTION_SEND); 
share.setType("audio/*"); 
share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///"+filePath)); 
startActivity(Intent.createChooser(share, "Share Sound File")); 

问题:由于某些原因,当我今天查这个程式码nexus 5X API 26仿真器,应用程序崩溃,而 我Xperia z5 premiumAPI 25)它像一个魅力。

这段代码有没有可能与新的api不兼容?

logcat-

08-24 15:16:08.445 3050-3050/com.example.tsuryohananov.mycallrecorder E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.example.tsuryohananov.mycallrecorder, PID: 3050 
                        android.os.FileUriExposedException: file:////storage/emulated/0/CallRecordings/24.08.2017 02-32-19 PM.m4a exposed beyond app through ClipData.Item.getUri() 
                         at android.os.StrictMode.onFileUriExposed(StrictMode.java:1932) 
                         at android.net.Uri.checkFileUriExposed(Uri.java:2348) 
                         at android.content.ClipData.prepareToLeaveProcess(ClipData.java:941) 
                         at android.content.Intent.prepareToLeaveProcess(Intent.java:9735) 
                         at android.content.Intent.prepareToLeaveProcess(Intent.java:9741) 
                         at android.content.Intent.prepareToLeaveProcess(Intent.java:9720) 
                         at android.app.Instrumentation.execStartActivity(Instrumentation.java:1609) 
                         at android.app.Activity.startActivityForResult(Activity.java:4471) 
                         at android.app.Activity.startActivityForResult(Activity.java:4429) 
                         at android.app.Activity.startActivity(Activity.java:4788) 
                         at android.app.Activity.startActivity(Activity.java:4756) 
                         at com.example.tsuryohananov.mycallrecorder.MainActivity$9.onClick(MainActivity.java:324) 
                         at android.view.View.performClick(View.java:6219) 
                         at android.view.View$PerformClick.run(View.java:24482) 
                         at android.os.Handler.handleCallback(Handler.java:769) 
                         at android.os.Handler.dispatchMessage(Handler.java:98) 
                         at android.os.Looper.loop(Looper.java:164) 
                         at android.app.ActivityThread.main(ActivityThread.java:6540) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

(线324是startActivity)

+1

您可以发布您的logcat的崩溃设备? –

+0

https://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed – CommonsWare

+1

@OrkunKoçyiğit信息发布 –

回答

2

问题在logcat中已经提及。 android.os.FileUriExposedException:file:////storage/emulated/0/CallRecordings/24.08.2017 02-32-19 PM.m4a通过ClipData.Item.getUri()发现超出应用程序

有两个解决这个问题的方法。

  1. 将下面的代码

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

Application.onCreate().

我们将只需按上述方法改变VmPolicy。通过这种方式,虚拟机将忽略暴露的URI暴露。默认方法是

builder.detectFileUriExposure() 

它检查文件的曝光。

  • ,而不是文件://尝试使用内容:// 在以后的Android版本,从24日开始,我们必须使用FileProvider类,这样的文件是其他应用程序访问,以及。
  • 我希望它能帮助,更多从 file://转换为content://

    转问这个问题 - https://stackoverflow.com/a/38858040

    +0

    非常感谢您的回答即时将尽快尝试它,并会upvote一个接受它 –

    +0

    StrictMode作品像一个魅力,谢谢你! –