我正在使用action_PROCESS_TEXTIntent 提供自定义文本选择操作。在 Marshmallow 上,我的操作同时显示在只读文本和EditText控件上,并且我的代码成功显示/返回结果。
在奥利奥(Pixel 2 XL)上,我的操作成功显示在只读文本上,但我没有EditText在我自己的应用程序或其他应用程序中的控件上显示我的操作。我还注意到其他流程文本应用程序(例如 Google 翻译)仅随机显示。
谷歌文档对此非常基础,我依赖原始博客文章,有什么改变吗?
这是我的相关清单和活动代码
显现
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:theme="@style/AppTheme">
...
<activity
android:name=".TranslateActivity"
android:label="@string/action_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
活动
package mynamespace
import android.app.Activity
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_translate.*
class TranslateActivity : AppCompatActivity() {
private var readOnly = true
val translator = Translator()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_translate)
setTitle(R.string.app_name)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
toolbar.setNavigationOnClickListener({
onBackPressed()
})
translator.loadTranslations()
handleIntent(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleIntent(intent)
}
private fun handleIntent(intent: Intent) {
if (intent.hasExtra(Intent.EXTRA_PROCESS_TEXT_READONLY)) {
readOnly = intent.getBooleanExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, false)
}
if (intent.hasExtra(Intent.EXTRA_PROCESS_TEXT)) {
val text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT).toString()
val result: String = translator.translate(text.toLowerCase())
if (readOnly) {
// Display result
textViewTranslation.text = result
} else {
replaceText(result)
}
}
}
private fun replaceText(replacementText: String) {
val intent = Intent()
intent.putExtra(Intent.EXTRA_PROCESS_TEXT, replacementText)
setResult(Activity.RESULT_OK, intent)
finish()
}
...
}
Run Code Online (Sandbox Code Playgroud)
ACTION_PROCESS_TEXT 在 Android 8.x 上效果不佳。
好消息是,这似乎已在 Android P 中修复。一旦所有 Android O 设备都退役,您在 2025 年及以后不会遇到任何问题。
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |