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

时间:2015-01-26 16:53:44

标签: android xml android-intent preferences

我想通过点击首选项条目打开应用程序设置。所以我向preferences.xml添加了一个意图

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

我已经在AndroidManifest.xml中添加了一个Intent过滤器

    <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

3 个答案:

答案 0 :(得分:4)

对于对OP如何使用OnPreferenceClickListener感兴趣的其他人check out this answer from a similar question。但是直接从意图发起活动,这对我有用:

<?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

请注意,我在<intent>内使用PreferenceScreen标记,而不是PreferenceCategory

希望有所帮助!

答案 1 :(得分:3)

将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>

答案 2 :(得分: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