запуск активности из файла предпочтений.xml - PullRequest
7 голосов
/ 11 декабря 2010

Я пытаюсь перейти на экран настроек, который находится по адресу -

android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS

Из записи в моей активности, но мне не повезло. В данный момент нажатие на запись просто обновляет тот же экран, на котором я был.

Мои предпочтения.xml выглядит так:

<Preference
         android:title="@string/my_location_settings">
    <intent android:action="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS">
    </intent>
 </Preference>

И моя запись в манифесте выглядит так:

<activity android:name=".Preferences">
        <intent-filter>
            <action android:name="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

Что я делаю не так?

LogCat:

12-11 15:53:34.170: INFO/ActivityManager(173): Starting activity: Intent { act=android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS cmp=com.my.app/.Preferences }
12-11 15:53:34.400: INFO/ActivityManager(173): Displayed activity com.my.app/.Preferences: 229 ms (total 229 ms)

Manifest:

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

    <activity android:name=".ViewActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MyPageOneActivity">
    </activity>
    <activity android:name=".MyPageTwoActivity">
    </activity>
    <activity android:name=".MyPageThreeActivity">
    </activity>
    <activity android:name=".Preferences">
        <intent-filter>
            <action android:name="com.my.app.PREFERENCES" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
</manifest>

Preferences.java ( извините за отсутствие форматирования):

  package com.my.app;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Preferences extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.preferences);
    }
}

и Предпочтения.xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference 
    android:title="Address 1"
    android:key="customURLOne" 
    android:summary="Enter a new address for 1">
</EditTextPreference>
<EditTextPreference 
    android:title="Address 2"
    android:key="customURLTwo" 
    android:summary="Enter a new address for 2">
</EditTextPreference>
<EditTextPreference 
    android:title="Address 3"
    android:key="customURLThree" 
    android:summary="Enter a new address for 3">
</EditTextPreference>
 <Preference android:title="@string/my_location_settings">
    <intent android:action="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS">
    </intent>
 </Preference>

Ответы [ 2 ]

10 голосов
/ 11 декабря 2010

Ладно, думаю, я понимаю - вам может быть неясно, что такое фильтр намерений.

Ваша запись в манифесте гласит:

<activity android:name=".Preferences">

Это определение вашей деятельности, которое называется [ваш пакет]. Предпочтения.

 <intent-filter>
    <action android:name="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS" />

Предпочтения будут срабатывать всякий раз, когда кто-то начинает намерение с ACTION_LOCATION_SOURCE_SETTINGS в качестве имени действия ...

        <category android:name="android.intent.category.DEFAULT" />

Предполагается, что это действие по умолчанию для этого действия.

    </intent-filter>
</activity>

Очевидно, что вы не хотите использовать имя действия Android API для своей деятельности (если только вы не пытаетесь предоставить альтернативу активности источника встроенного местоположения Android). Используйте другое имя действия для основного экрана предпочтений, желательно с именем пакета в нем.

РЕДАКТИРОВАТЬ: Кроме того, попробуйте использовать PreferenceScreen:

<PreferenceScreen android:title="@string/my_location_settings">
    <intent android:action="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS">
    </intent>
</PreferenceScreen>
3 голосов
/ 27 мая 2015

У меня ничего не работает, поэтому я сделал: (Я думаю, что это плохая идея, но ...)

1.Удалите этот фильтр из манифеста

<intent-filter>
<action android:name="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

1.Упростите настройку

<Preference android:key="simple_key"
        android:title="@string/title_simple_key">
    </Preference>

2.Добавить Clicklistener в ваш PreferenceFragment

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.layout.preferences);
    // Load the preferences from an XML resource
    findPreference("simple_key").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            startActivity(new Intent(
                    android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            return false;
        }
    });

}

PS Извините за мой английский

...