2010-12-11 2 views
7

Я пытаюсь перейти к экрану установок найти на -начинает деятельность с preferences.xml

android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS 

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

Мой preferences.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); 
    } 
} 

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

+0

Что говорит ловушка? Кроме того, можете ли вы опубликовать запись манифеста для своей главной страницы настроек? Тот, к которому вы продолжаете возвращаться? – EboMike

+0

Это явная запись для моей главной страницы настроек, logcat: – qubz

+0

12-11 15: 53: 34.170: INFO/ActivityManager (173): Начальная деятельность: Intent {act = android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS cmp = com. my.app/.Preferences} 12-11 15: 53: 34.400: INFO/ActivityManager (173): Отображается активность com.my.app/.Preferences: 229 мс (всего 229 мс) – qubz

ответ

10

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

манифеста запись говорит:

<activity android:name=".Preferences"> 

Это определение для вашей деятельности под названием [ваш пакет] .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 встроенный источник активности местоположения). Используйте другое имя действия для экрана основных настроек, желательно что-то с вашим именем пакета в нем.

EDIT: Кроме того, попробуйте использовать PreferenceScreen:

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

Звучит неплохо, ваше право, я не совсем понял, что касается фильтров намерений. Я дам ему шанс и посмотрю, как это получится. – qubz

+0

Удачи! Дайте мне знать, как это работает! – EboMike

+0

Мне до сих пор не повезло, я чувствую, что не знаю, что я делаю. Вы говорите, что я изменяю имя действия в манифесте и файл preferences.xml? Если я это сделаю, как мне начать работу с источником нужного местоположения? – qubz

1

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

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; 
     } 
    }); 

} 

P.S. Извините за мой английский

+0

Я не знаю почему, но с другим методом, а не с активностью, которую я объявляю, он снова открыл активность предпочтений, поэтому этот метод работал для меня (: – FeanDoe

Смежные вопросы