diff --git a/example/libs/sellycloudsdk-1.0.0.aar b/example/libs/sellycloudsdk-1.0.0.aar index 230780c..f72d939 100644 Binary files a/example/libs/sellycloudsdk-1.0.0.aar and b/example/libs/sellycloudsdk-1.0.0.aar differ diff --git a/example/src/main/assets/vod/sample.mp4 b/example/src/main/assets/vod/sample.mp4 new file mode 100644 index 0000000..295e97d Binary files /dev/null and b/example/src/main/assets/vod/sample.mp4 differ diff --git a/example/src/main/java/com/demo/SellyCloudSDK/FeatureHubActivity.kt b/example/src/main/java/com/demo/SellyCloudSDK/FeatureHubActivity.kt index 8970b5f..9ce0eb5 100644 --- a/example/src/main/java/com/demo/SellyCloudSDK/FeatureHubActivity.kt +++ b/example/src/main/java/com/demo/SellyCloudSDK/FeatureHubActivity.kt @@ -4,6 +4,7 @@ import android.app.Dialog import android.content.Intent import android.graphics.Rect import android.graphics.Typeface +import android.net.Uri import android.os.Bundle import android.util.TypedValue import android.view.Gravity @@ -65,12 +66,14 @@ class FeatureHubActivity : AppCompatActivity() { private val uiScope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate) - /** VOD 对话框中的输入框引用,用于文件选择器回填 */ - private var pendingVodUrlInput: android.widget.EditText? = null + /** 当前打开的 VOD 配置对话框,便于文件选择完成后直接进入播放页。 */ + private var pendingVodDialog: Dialog? = null private val vodFilePicker = registerForActivityResult( ActivityResultContracts.GetContent() ) { uri -> - uri?.let { pendingVodUrlInput?.setText(it.toString()) } + if (uri == null) return@registerForActivityResult + pendingVodDialog?.dismiss() + startVodPlayback(uri.toString(), uri) } private lateinit var aliveAdapter: AliveStreamAdapter @@ -486,8 +489,12 @@ class FeatureHubActivity : AppCompatActivity() { dialog.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) dialog.setCancelable(true) - pendingVodUrlInput = dialogBinding.etVodUrl - dialog.setOnDismissListener { pendingVodUrlInput = null } + pendingVodDialog = dialog + dialog.setOnDismissListener { + if (pendingVodDialog === dialog) { + pendingVodDialog = null + } + } dialogBinding.btnClose.setOnClickListener { dialog.dismiss() } dialogBinding.btnStartVod.setOnClickListener { @@ -497,14 +504,14 @@ class FeatureHubActivity : AppCompatActivity() { return@setOnClickListener } dialog.dismiss() - startActivity(VodPlayActivity.createIntent(this, input)) + startVodPlayback(input) } dialogBinding.btnPickLocalFile.setOnClickListener { vodFilePicker.launch("video/*") } dialogBinding.btnPlayAssetSample.setOnClickListener { dialog.dismiss() - startActivity(VodPlayActivity.createIntent(this, "asset:///vod/sample.mp4")) + startVodPlayback("asset:///vod/sample.mp4") } loadVodList(dialogBinding) @@ -512,6 +519,10 @@ class FeatureHubActivity : AppCompatActivity() { dialog.show() } + private fun startVodPlayback(input: String, sourceUri: Uri? = null) { + startActivity(VodPlayActivity.createIntent(this, input, sourceUri)) + } + private fun loadVodList(dialogBinding: DialogVodInputBinding) { dialogBinding.pbVodListFull.isVisible = true dialogBinding.pbVodList.isVisible = true diff --git a/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt b/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt index 6fb5302..e5ea9a6 100644 --- a/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt +++ b/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt @@ -119,6 +119,7 @@ class VodPlayActivity : AppCompatActivity() { }) val url = intent.getStringExtra(EXTRA_VOD_URL)?.trim().orEmpty() + .ifEmpty { intent.dataString?.trim().orEmpty() } if (url.isEmpty()) { Toast.makeText(this, "请输入有效的播放地址", Toast.LENGTH_SHORT).show() finish() @@ -653,9 +654,13 @@ class VodPlayActivity : AppCompatActivity() { private const val MAX_LOG_LINES = 200 private const val SEEK_FORWARD_MS = 10_000L - fun createIntent(context: Context, url: String): Intent { + fun createIntent(context: Context, url: String, sourceUri: android.net.Uri? = null): Intent { return Intent(context, VodPlayActivity::class.java).apply { putExtra(EXTRA_VOD_URL, url) + if (sourceUri != null) { + data = sourceUri + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + } } } }