这是我的preference.xml的一部分。
<Preference
android:summary="Write me"
android:title="Title">
<intent
android:action="android.intent.action.VIEW"
android:data="mailto:support@xxxxx.com"
/>
</Preference>
当我点击此偏好时,我发生了
崩溃 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=mailto:xxxxxx.x@x-xxxxxx.xxx }
我做错了什么?
这是我的偏好课程。我读过许多故事,但没有找到答案:
public class Preferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
public static final String KEY_PREF_INSTANT_PRINT = "instantPrinting";
public static final String KEY_PREF_INSTANT_PRINT_SCREEN = "instantPrintingScreen";
public static final String KEY_PREF_PAY_BUTTONS = "paymentTypes";
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
addPreferencesFromResource(R.xml.preference);
Preference instantPrintingScreen = findPreference(KEY_PREF_INSTANT_PRINT_SCREEN);
instantPrintingScreen.setEnabled(sharedPref.getBoolean(KEY_PREF_INSTANT_PRINT, false));
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals(KEY_PREF_INSTANT_PRINT)) {
Preference connectionPref = findPreference(KEY_PREF_INSTANT_PRINT_SCREEN);
connectionPref.setEnabled(sharedPreferences.getBoolean(key, false));
}
}
}
答案 0 :(得分:1)
首选项将完美运行,此处的问题是您没有任何客户端应用程序来处理电子邮件。
我已经安装了3个可以处理电子邮件的应用程序,所以如果我尝试打开首选项,我会看到应用程序:
问题是因为您的设备没有可以打开的任何应用 方案
mailto:
或可以处理电子邮件。
如何验证ActivityNotFoundException: No Activity found to handle Intent
?
在这种情况下,您可以直接从布局中打开意图:
<intent
android:action="android.intent.action.VIEW"
android:data="mailtoa:support@xxxxx.com"
/>
因此,作为一个选项,您可以进行预先验证,以确定您是否可以在Android设备中安装某些应用程序来打开电子邮件。
public boolean canOpenEmail(){
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:support@xxxxx.com")));
}catch (ActivityNotFoundException afe){
Log.e(TAG, afe.getMessage());
return false;
}
return true;
}