You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发可接收手机浏览器网页文章分享的Android Studio应用

实现Android网页分享保存应用的具体步骤

1. 配置应用接收分享的Intent

在AndroidManifest.xml中给接收分享的Activity添加Intent过滤器,让浏览器能将你的应用识别为分享目标:

<activity
    android:name=".ShareReceiverActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- 处理文本类型(含链接) -->
        <data android:mimeType="text/plain" />
        <!-- 支持网页类型分享 -->
        <data android:mimeType="text/html" />
    </intent-filter>
</activity>

2. 接收分享的数据

在ShareReceiverActivity中获取分享的标题、链接及内容:

class ShareReceiverActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        intent?.takeIf { it.action == Intent.ACTION_SEND }?.let {
            val sharedTitle = it.getStringExtra(Intent.EXTRA_TITLE)
            val sharedText = it.getStringExtra(Intent.EXTRA_TEXT)
            val sharedHtml = it.getStringExtra(Intent.EXTRA_HTML_TEXT)
            
            val articleUrl = extractUrlFromText(sharedText)
            val contentToSave = sharedHtml ?: sharedText

            // 调用保存逻辑,可替换为Room数据库存储
            saveArticle(sharedTitle, articleUrl, contentToSave)
            
            Toast.makeText(this, "文章已保存", Toast.LENGTH_SHORT).show()
            finish()
        }
    }

    // 从文本中提取HTTP/HTTPS链接
    private fun extractUrlFromText(text: String?): String? {
        text ?: return null
        val urlPattern = Regex("https?://\\S+")
        return urlPattern.find(text)?.value
    }

    // 用SharedPreferences演示存储,实际建议用Room
    private fun saveArticle(title: String?, url: String?, content: String?) {
        val sharedPref = getSharedPreferences("SavedArticles", MODE_PRIVATE)
        val editor = sharedPref.edit()
        val articleId = System.currentTimeMillis().toString()
        editor.putString("title_$articleId", title ?: "无标题")
        editor.putString("url_$articleId", url ?: "")
        editor.putString("content_$articleId", content ?: "")
        editor.apply()
    }
}

3. 保存文章全文(可选)

若要获取完整文章内容,可通过链接请求网页源码,再用Jsoup解析正文:

  1. 添加依赖:
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'org.jsoup:jsoup:1.17.2'
  1. 实现获取与解析逻辑:
private fun fetchAndSaveFullArticle(url: String, title: String?) {
    val okHttpClient = OkHttpClient()
    val request = Request.Builder().url(url).build()
    
    okHttpClient.newCall(request).enqueue(object : Callback {
        override fun onFailure(call: Call, e: IOException) {
            runOnUiThread {
                Toast.makeText(this@ShareReceiverActivity, "获取全文失败", Toast.LENGTH_SHORT).show()
                finish()
            }
        }

        override fun onResponse(call: Call, response: Response) {
            response.body?.string()?.let { html ->
                val doc = Jsoup.parse(html)
                // 适配常见网站的正文选择器,可根据需求调整
                val mainContent = doc.select("article").text().takeIf { it.isNotEmpty() } ?: doc.body().text()
                
                saveArticle(title, url, mainContent)
                
                runOnUiThread {
                    Toast.makeText(this@ShareReceiverActivity, "文章已保存", Toast.LENGTH_SHORT).show()
                    finish()
                }
            }
        }
    })
}

4. 打开已保存的文章

在文章列表页面的点击事件中,调用浏览器打开链接:

// 示例:点击列表项时触发
val articleUrl = savedArticle.url
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(articleUrl))
startActivity(intent)

5. 关键注意事项

  • 网络权限:在AndroidManifest.xml添加<uses-permission android:name="android.permission.INTERNET" />
  • 数据存储:大量文章建议用Room数据库,替代SharedPreferences
  • 后台处理:耗时的全文获取任务可改用WorkManager,避免Activity销毁中断任务
  • 选择器适配:不同网站正文结构不同,可提供用户手动选择正文区域的功能优化体验

内容的提问来源于stack exchange,提问作者Sophia282

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:25:19