Android(Kotlin):用于共享mp3文件的FileProvider
我正在编码一个在卡视图中显示一些MP3文件的应用程序,并且正在尝试设置一个“共享”按钮将文件发送到其他应用程序。我正在使用fileprovider。我设法分享了文本,但是我无法使用文件。我正在使用构造函数访问我的外部存储中的所有MP3文件,它们不是存储在Android Studio中的“ RAW”文件夹中的MP3。
inner class MySongAdapter : BaseAdapter {
private val authorities = "com.example.loadmedia_sdcard_demo.fileprovider"
private lateinit var mainAudio: File
var myListSong = ArrayList<SongInfo>()
constructor(myListSong: ArrayList<SongInfo>) : super() {
this.myListSong = myListSong
}
override fun getView(position: Int, p1: View?, p2: ViewGroup?): View {
var myview = layoutInflater.inflate(R.layout.mylayout, null)
var song : SongInfo = myListSong[position]
myview.textView1.text = song.Title
myview.textView2.text = song.Author
myview.share_button.setOnClickListener {
val path = FileProvider.getUriForFile(this@MainActivity, authorities, mainAudio)
val shareIntent = Intent()
shareIntent.action = Intent.ACTION_SEND
shareIntent.putExtra(Intent.EXTRA_STREAM, path)
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
shareIntent.type = "audio/*"
startActivity(Intent.createChooser(shareIntent, "Share..."))
}
问题是在Val路径内部,它要求文件。
val path = FileProvider.getUriForFile(this@MainActivity, authorities, mainAudio) // here is the problem
对如何做的任何想法吗?非常感谢。
编辑:
堆栈跟踪:
D/AndroidRuntime:关闭VM E/Androidruntime:致命例外:主要 过程:com.example.loadmedia_sdcard_demo,pid:21603 kotlin.nitializationpropertyaccessexception:lateinit属性Mainaudio尚未初始化 在com.example.loadmedia_sdcard_demo.mainactivity $ mysongadapter.getView $ lambda-0(mainActivity.kt:61) 在com.example.loadmedia_sdcard_demo.mainactivity $ mysongadapter。$ r8 $ lambda $ hlrnjvjsvoebk3bd6bd6ex7opsto8m(未知来源:0) 在com.example.example.loadmedia_sdcard_demo.mainactivity $ mysongadapter $$ externalsyntheticlambda0.onclick(未知来源:4) at android.view.view.performClick(view.java:7125) 在com.google.android.material.button.materialbutton.performclick(Matersbutton.java:1194) at android.view.view.performclickinternal(view.java:7102) at android.view.view.access $ 3500(view.java:801) at android.view.view $ persilClick.run(view.java:27336) 在Android.os.handler.handlecallback(Handler.java:883) 在Android.os.handler.dispatchMessage(Handler.java:100) at android.os.looper.loop(looper.java:214) at android.app.activitythread.main(activityThread.java:7356) 在java.lang.reflect.method.invoke(本机方法)上 在com.android.internal.os.os.runtimeinit $ methodAndargScaller.run(runtimeinit.java:492) 在com.android.internal.os.os.zygoteinit.main(zygoteinit.java:930) I/过程:发送信号。 PID:21603 SIG:9
详细问题:我正在尝试与电报共享一个MP3文件。当我单击“共享”按钮时,应用程序崩溃。
I am coding an app that shows some mp3 files in a card view and I am trying to set a "Share" button to send the files to other apps, one by one. I am using FileProvider. I managed to share a text, but I can't do it with my files. I am accessing all the mp3 files in my external storage with a constructor, they are not mp3 stored in a "raw" folder in Android Studio.
inner class MySongAdapter : BaseAdapter {
private val authorities = "com.example.loadmedia_sdcard_demo.fileprovider"
private lateinit var mainAudio: File
var myListSong = ArrayList<SongInfo>()
constructor(myListSong: ArrayList<SongInfo>) : super() {
this.myListSong = myListSong
}
override fun getView(position: Int, p1: View?, p2: ViewGroup?): View {
var myview = layoutInflater.inflate(R.layout.mylayout, null)
var song : SongInfo = myListSong[position]
myview.textView1.text = song.Title
myview.textView2.text = song.Author
myview.share_button.setOnClickListener {
val path = FileProvider.getUriForFile(this@MainActivity, authorities, mainAudio)
val shareIntent = Intent()
shareIntent.action = Intent.ACTION_SEND
shareIntent.putExtra(Intent.EXTRA_STREAM, path)
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
shareIntent.type = "audio/*"
startActivity(Intent.createChooser(shareIntent, "Share..."))
}
The problem is inside val path, it is requesting a file.
val path = FileProvider.getUriForFile(this@MainActivity, authorities, mainAudio) // here is the problem
Any idea of how to do it? Thank you very much.
Edit:
Stack Trace:
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.loadmedia_sdcard_demo, PID: 21603
kotlin.UninitializedPropertyAccessException: lateinit property mainAudio has not been initialized
at com.example.loadmedia_sdcard_demo.MainActivity$MySongAdapter.getView$lambda-0(MainActivity.kt:61)
at com.example.loadmedia_sdcard_demo.MainActivity$MySongAdapter.$r8$lambda$hlRnJvjsvoebk3BD6eX7OpstO8M(Unknown Source:0)
at com.example.loadmedia_sdcard_demo.MainActivity$MySongAdapter$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7125)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
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:930)
I/Process: Sending signal. PID: 21603 SIG: 9
Problem in detail: I am trying to share an mp3 file with, for instance, Telegram. When I click the "Share" button the app crashes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您将
mainaudio
声明为:它之前,您从未为其分配值
但是,在尝试使用 否则,您将获得此例外。
You declared
mainAudio
as:However, you never assigned a value to it, before you tried using it here:
You need to assign a value to a
lateinit var
before you try using it, otherwise you will get this exception.