如何开发可接收手机浏览器网页文章分享的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解析正文:
- 添加依赖:
implementation 'com.squareup.okhttp3:okhttp:4.12.0' implementation 'org.jsoup:jsoup:1.17.2'
- 实现获取与解析逻辑:
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
相关产品推荐
相关产品推荐

