Reputation: 2117
I have a setting preference from which upon clicking on a certain preference, i want to open the default mail app. My code is as follows:
preference.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
...
<PreferenceCategory
app:key="@string/settings_key_category_help"
app:title="@string/settings_title_category_help">
<Preference
app:key="@string/settings_key_help_feedback"
app:summary="@string/settings_summary_help_feedback"
app:title="@string/settings_title_help_feedback"
app:icon="@drawable/ic_feedback">
<intent
android:action="android.intent.action.SENDTO" />
</Preference>
</PreferenceCategory>
</PreferenceScreen>
FragmentSettings.kt
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.xml_settings_main, rootKey)
}
override fun onStart() {
super.onStart()
feedbackPreference()
}
private fun feedbackPreference(){
findPreference<Preference>(getString(R.string.settings_key_help_feedback))?.setOnPreferenceClickListener {
Log.i("Settings_Test", "Hit")
val intent = Intent(Intent.ACTION_SENDTO).apply {
type = "text/plain"
putExtra(Intent.EXTRA_EMAIL, arrayOf("[email protected]")) // recipients
putExtra(Intent.EXTRA_SUBJECT, "Email subject")
putExtra(Intent.EXTRA_TEXT, "Email message text")
}
it.intent = intent
true
}
}
}
However, when i click on the feedback settings, nothing happens. I can see the log "Hit" in the logcat. Am i using the intent in the wrong way here? can someone please help me.
Upvotes: 1
Views: 737
Reputation: 1086
There are two ways to achieve your goal, choose one depends on your case:
intent
and extra
tag in your preference.xml
<Preference
app:key="@string/settings_key_help_feedback"
app:summary="@string/settings_summary_help_feedback"
app:title="@string/settings_title_help_feedback"
app:icon="@drawable/ic_feedback">
<intent android:action="android.intent.action.VIEW"
android:data="mailto:[email protected]" >
<extra
android:name="android.intent.extra.SUBJECT"
android:value="Email subject"/>
<extra
android:name="android.intent.extra.TEXT"
android:value="Email message text"/>
</intent>
</Preference>
in res/values/strings.xml
, set your email address
<string name="contact_help_feedback_uri">mailto:[email protected]</string>
Intent
in your FragmentSettings.kt
<Preference
app:key="@string/settings_key_help_feedback"
app:summary="@string/settings_summary_help_feedback"
app:title="@string/settings_title_help_feedback"
app:icon="@drawable/ic_feedback" />
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
findPreference<Preference>(getString(R.string.settings_key_help_feedback))?.setOnPreferenceClickListener {
val intent = Intent(Intent.ACTION_SEND).apply {
type = "plain/text"
putExtra(Intent.EXTRA_EMAIL, arrayOf("[email protected]"))
putExtra(Intent.EXTRA_SUBJECT, "subject")
putExtra(Intent.EXTRA_TEXT, "mail body")
}
startActivity(Intent.createChooser(intent, ""))
true
}
}
}
Upvotes: 3