Я пытаюсь реализовать поддержку графической клавиатуры в своем приложении. Я следовал за официальной документацией . Для поддержки этого мне нужно было переопределить EditText
onCreateInputConnection
, чтобы сообщить программной клавиатуре, что приложение поддерживает, и обратный вызов для получения выбранного Uri контента.
EditText:
override fun onCreateInputConnection(editorInfo: EditorInfo): InputConnection {
val ic: InputConnection = super.onCreateInputConnection(editorInfo)
EditorInfoCompat.setContentMimeTypes(editorInfo, arrayOf("image/jpeg", "image/png"))
val callback =
InputConnectionCompat.OnCommitContentListener { inputContentInfo, flags, opts ->
val lacksPermission = (flags and
InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0
// read and display inputContentInfo asynchronously
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && lacksPermission) {
try {
inputContentInfo.requestPermission()
} catch (e: Exception) {
return@OnCommitContentListener false // return false if failed
}
}
// read and display inputContentInfo asynchronously.
// call inputContentInfo.releasePermission() as needed.
true // return true if succeeded
}
return InputConnectionCompat.createWrapper(ic, editorInfo, callback)
}
работает нормально. Сюрприз !!!
проблема - это когда я добавил фильтр намерений в действие. После добавления фильтра намерений обратный вызов InputConnectionCompat.OnCommitContentListener
больше не вызывается, и открывается действие с поддерживаемым фильтром намерений.
Манифест:
<activity
android:name=".Main2Activity"
android:label="@string/title_activity_main2">
<intent-filter> <-- this filter is added
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
</intent-filter>
</activity>
образец доступен в github
Заранее спасибо.