Android (Kotlin): FileProvider共享mp3文件



我正在编写一个应用程序,显示一些mp3文件在卡视图,我试图设置一个"共享"按钮,将文件一个接一个地发送到其他应用程序。我正在使用文件提供程序。我成功地分享了一条短信,但我不能用我的文件。我访问所有的mp3文件在我的外部存储与构造函数,他们不是mp3存储在"raw">

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:关机VME/AndroidRuntime: FATAL EXCEPTION: maincom . example。过程:loadmedia_sdcard_demo, PID: 21603芬兰湾的科特林。UninitializedPropertyAccessException: lateinit属性mainAudio未初始化在com.example.loadmedia_sdcard_demo.MainActivity MySongAdapter.getView lambda-0美元(MainActivity.kt: 61)在com.example.loadmedia_sdcard_demo.MainActivity MySongAdapter美元。r8λhlRnJvjsvoebk3BD6eX7OpstO8M美元美元(未知来源:0)在com.example.loadmedia_sdcard_demo.MainActivity MySongAdapter ExternalSyntheticLambda0美元美元。onClick(未知来源:4)android.view.View.performClick (View.java: 7125)com.google.android.material.button.MaterialButton.performClick (MaterialButton.java: 1194)android.view.View.performClickInternal (View.java: 7102)android.view.View.access 3500美元(View.java: 801)android.view.View PerformClick.run美元(View.java: 27336)android.os.Handler.handleCallback (Handler.java: 883)android.os.Handler.dispatchMessage (Handler.java: 100)android.os.Looper.loop (Looper.java: 214)android.app.ActivityThread.main (ActivityThread.java: 7356)在java.lang.reflect.Method。调用(本地方法)com.android.internal.os.RuntimeInit MethodAndArgsCaller.run美元(RuntimeInit.java: 492)com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 930)I/Process:发送信号。PID: 21603 SIG: 9

详细问题:我正在尝试与,例如,Telegram共享mp3文件。当我点击"分享;点击应用程序崩溃

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)

您将mainAudio声明为:

private lateinit var mainAudio: File

但是,在您尝试在这里使用它之前,您从未为它赋值:

val path = FileProvider.getUriForFile(this@MainActivity, authorities, mainAudio)

在你尝试使用lateinit var之前,你需要给它赋一个值,否则你会得到这个异常。

相关内容

  • 没有找到相关文章

最新更新