通过Intent从preferences.xml打开应用程序设置

3

我希望通过点击偏好设置条目来打开应用程序设置。因此,我在preferences.xml中添加了一个意图。

    <PreferenceScreen
        android:key="DELETE_DATA"
        android:title="@string/pref_delete_data">
        <intent android:action="android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS"/>
    </PreferenceScreen>

我已经将Intent-filter添加到了AndroidManifest.xml文件中

    <activity
        android:name=".SettingsActivity"
        android:label="@string/title_activity_settings"
        android:parentActivityName=".MainActivity">
        <intent-filter>
            <action android:name="android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
...

使用上述代码后,没有任何操作或错误发生。但我不知道为什么... 如果我删除<category>,就会出现错误,因此意图被触发。有任何想法吗?

设备:搭载Android 4.4.4的HTC One M8


你必须在首选项屏幕上有一个按钮或其他东西,才能正确地进入应用程序设置,对吗? - Kostas Drak
好的,“PreferenceScreen”是一个嵌入式元素(所以这就是按钮)。如果我通过OnPreferenceClickListener的代码触发意图,它可以工作。但我更喜欢通过“preferences.xml”来完成这个操作。有什么提示吗? - ray
3个回答

4

对于其他对OP如何使用OnPreferenceClickListener感兴趣的人,可以查看类似问题的这个答案。但是要直接从意图中启动活动,我用了以下方法:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory
    android:title="@string/pref_title_category_name">
  <PreferenceScreen
    android:title="@string/pref_title_activity_name"
    android:key="pref_launch_settings">
  <intent
    android:action="android.intent.action.VIEW"
    android:data="<data>"
    android:targetPackage="<package name>"
    android:targetClass="<target class>" />
  </PreferenceScreen>
</PreferenceCategory>

数据 = 完整的包名和活动名称。即,com.example.myapp.ActivityName

包名 = 在您的清单文件根目录中定义的包名。即,com.example.myapp

targetClass = 再次是完整的包路径,即,com.example.myapp.ActivityName

请注意,我在PreferenceScreen内部以这种方式使用<intent>标记,而不是PreferenceCategory

希望这可以帮到您!


1
这个可行。不知道为什么没有被投票。我还没有找到更好的答案。 - wsgeorge
我想指出,如果您正在使用产品风味,"包名"应该是应用程序ID。 - wsgeorge
这个XML声明能否结束调用的活动? - DaniloDeQueiroz

4

将 android:data 设置为您的包名。将下面的 com.myapp 替换为您在清单文件中找到的应用程序包名。

  <PreferenceScreen
        android:title="@string/system_settings_preference_title" >
        <intent android:action="android.settings.APPLICATION_DETAILS_SETTINGS"
            android:data="package:com.myapp"/>
    </PreferenceScreen>

1
        <Preference android:title="@string/pref_app_version"
        android:summary="@string/pref_app_version_summary">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="YOUR APPLICATION ID"
            android:targetClass="com.my.java.packagename.MyActivity"/>
    </Preference>

今天我注意到了一些事情。如果你正在处理不同的产品风格,请确保targetpackage是在build.gradle中定义的applicationId

可以自动为applicationId生成每个flavor的字符串属性:https://dev59.com/NYzda4cB1Zd3GeqPm3he#55300377 - ge0rg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接