从Android偏好活动

时间:2017-06-09 05:53:27

标签: android android-intent gradle

我有一个带有PreferenceActivity的Android应用,其中一个偏好条目会启动我自己的一个活动("关于"屏幕)。条目如下所示:

<PreferenceScreen android:title="@string/about.Title">
    <intent ... />
</PreferenceScreen>

另外(这很重要),我使用Gradle和.debug应用程序ID后缀作为我的调试版本。我在手机上安装了Play商店版和调试版。

问题是:上面使用什么样的意图?我知道有两种选择,两种选择都不起作用:

  1. 使用我自己的操作字符串android:action意图,并在我的清单中使用<intent-filter>注册该操作字符串。
    1. 如果我在清单中使用android:exported="false",则在安装两个应用时,Android 7.1上的活动无法加载。 (我得到&#34;完成动作使用......没有应用程序可以执行此操作&#34;。)如果只安装了一个(或者),它可以正常工作。
    2. 如果我使用android:exported="true",那么我不仅要导出内部活动,而且当我点击首选项时,活动的两个实例将被推送到堆栈中(每个实例一个)应用程序)。如果我只安装两个应用程序中的一个,则只显示一个实例。
  2. 使用android:targetPackageandroid:androidClass方法,但后来我不知道该怎么用于包,因为它与发布和调试版本不同(因为后缀)。一种解决方案是在调试资源文件夹中拥有preferences.xml文件的副本,只更改了包,但这很容易出错。
  3. 我多年来一直在使用#1.1选项,但它最近在我的手机上出现故障,我怀疑7.1更新应该受到指责。我之前从未在这两个已安装的应用程序之间进行过交谈!

    这必须是一种非常常见的模式!有什么想法吗?

1 个答案:

答案 0 :(得分:1)

请按照以下步骤操作:

使用

添加首选项后
addPreferencesFromResource(R.xml.preferences);

找到您想要设置onClick的首选项,并通过像

这样的转换来定义它
Preference pref = (Preference) findPreference("pref");

然后您可以使用:

轻松设置其onClick
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
    @Override
    public boolean onPreferenceClick(Preference preference) {
        startActivity(new Intent(CurrentActivity.this, NextActivity.class));
        return true;
    }
});