2010-12-11 33 views
7

Ich versuche, auf die Einstellungen zu gehen Bildschirm gefunden. Im Moment wird durch das Drücken des Eintrags nur der Bildschirm aktualisiert, auf dem ich gerade war.Starten eine Aktivität von preferences.xml

sieht mein preferences.xml wie folgt aus:

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

Und mein Manifest-Eintrag sieht wie folgt aus:

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

Was mache ich falsch?

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 ( traurig über den Mangel an Formatierung):

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

und 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

Was sagt der Logcat? Können Sie den Manifest-Eintrag für Ihre Haupteinstellungen posten? Derjenige, zu dem du immer zurückkommst? – EboMike

+0

Dies ist der Manifest-Eintrag für meine Haupteinstellungen, das Logcat: – qubz

+0

12-11 15: 53: 34.170: INFO/ActivityManager (173): Startaktivität: Intent {act = android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS cmp = com. my.app/.Preferences} 12-11 15: 53: 34.400: INFO/ActivityManager (173): Angezeigte Aktivität com.my.app/.Preferences: 229 ms (insgesamt 229 ms) – qubz

Antwort

10

Okay, ich glaube, ich verstehe - Sie unklar sind, was eine Intent-Filter ist.

Ihr Manifest Eintrag sagt:

<activity android:name=".Preferences"> 

Dies ist die Definition für Ihre Aktivitäten [Ihr Paket] .Preferences genannt wird.

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

Einstellungen wird ausgelöst, wenn jemand eine Absicht mit ACTION_LOCATION_SOURCE_SETTINGS als Aktionsname beginnt ...

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

Dies soll die Standardoption für diese Aktion sein.

</intent-filter> 
</activity> 

Offensichtlich wollen Sie nicht einen Android-API Aktionsnamen für Ihre Tätigkeit verwenden (es sei denn, Sie versuchen, eine Alternative zu Android-interner Standortquelle Aktivität zur Verfügung zu stellen). Verwenden Sie einen anderen Aktionsnamen für Ihre Haupteinstellungen, vorzugsweise etwas mit Ihrem Paketnamen.

EDIT: Versuchen Sie auch, eine PreferenceScreen mit:

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

Hört sich gut an, dein Recht, ich wusste nicht, was Absichtsfilter sind, danke. Ich werde es versuchen und sehen, wie es geht – qubz

+0

Viel Glück! Lass mich wissen, wie das geht! – EboMike

+0

Ich habe immer noch kein Glück, weil ich das Gefühl habe, ich weiß nicht wirklich, was ich tue. Willst du damit sagen, dass ich den Namen der Aktion im Manifest und in der Datei preferences.xml ändere? Wenn ich das tue, wie starte ich die gewünschte Standortquellaktivität? – qubz

1

Nichts für mich funktioniert, so habe ich: (Ich denke, es ist eine schlechte Idee, aber ...)

1.Entfernen Sie diesen Filter aus offensichtlichen

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

1. Make Präferenz einfacher

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

2. Fügen Sie in Ihrem 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. Entschuldigung für mein Englisch

+0

Ich weiß nicht warum, aber mit der anderen Methode anstelle der Aktivität, die ich deklariere, öffnete es die Einstellungen Aktivität wieder, so dass diese Methode für mich funktionierte (: – FeanDoe

Verwandte Themen