从Android首选项活动跳转到活动

从Android首选项活动跳转到活动,android,android-intent,gradle,Android,Android Intent,Gradle,我有一个带有首选项活动的Android应用程序,其中一个首选项会启动我自己的一项活动(“关于”屏幕)。条目如下所示: <PreferenceScreen android:title="@string/about.Title"> <intent ... /> </PreferenceScreen> 另外(这一点很重要),我在调试构建中使用Gradle和.debug应用程序ID后缀。我在手机上安装了Play Store版本和debug版本 问题是:使

我有一个带有
首选项活动的Android应用程序,其中一个首选项会启动我自己的一项活动(“关于”屏幕)。条目如下所示:

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

另外(这一点很重要),我在调试构建中使用Gradle和
.debug
应用程序ID后缀。我在手机上安装了Play Store版本和debug版本

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

  • android:action
    意图与我自己的操作字符串一起使用,并使用
    在我的清单中注册该操作字符串。
  • 如果我在清单中使用了
    android:exported=“false”
    ,那么当安装了两个应用程序时,活动将无法加载到android 7.1上。(我得到“使用完成操作…没有应用程序可以执行此操作”。)如果只安装了一个(或者)
  • 如果我使用android:exported=“true”
  • ,那么我不仅要导出一个内部活动,而且当我点击首选项时,会在堆栈上推送两个活动实例(每个应用程序一个)。如果我只安装这两个应用中的一个,那么只会显示一个实例
  • 使用
    android:targetPackage
    android:androidClass
    方法,但是我不知道该为包使用什么,因为发布版本和调试版本(因为后缀)不同。一种解决方案是在调试资源文件夹中有一个
    preferences.xml
    文件的副本,只更改包,但这很容易出现错误
  • 多年来我一直在使用option#1.1,但最近它在我的手机上坏了,我怀疑是7.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;
        }
    });