2016-12-22 2 views
1

Voici ma classe Java.Votre implémentation de PreferenceActivity est vulnérable à l'injection de fragment

public class MyPrefrences extends PreferenceActivity { 

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

    addPreferencesFromResource(R.xml.preferences); 
} 

}

dans mon projet, j'utilisé preferences.xml

<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

<PreferenceCategory 
     android:title="@string/steps_settings_title"> 

    <ListPreference 
      android:key="sensitivity" 
      android:title="@string/setting" 
      android:summary="@string/setting_details" 
      android:entries="@array/preference" 
      android:entryValues="@array/preference_values" 
      android:dialogTitle="@string/setting_title" 
      android:defaultValue="30" /> 

    <ListPreference 
      android:key="operation_level" 
      android:title="@string/operation_level_setting" 
      android:summary="@string/operation_level_setting_details" 
      android:entries="@array/operation_level_preference" 
      android:entryValues="@array/operation_level_preference_values" 
      android:dialogTitle="@string/operation_level_setting_title" 
      android:defaultValue="30" /> 

    <ListPreference 
      android:key="units" 
      android:title="@string/units_setting" 
      android:summary="@string/units_setting_details" 
      android:entries="@array/units_preference" 
      android:entryValues="@array/units_preference_values" 
      android:dialogTitle="@string/units_setting_title" 
      android:defaultValue="imperial" /> 

    <com.example.myapp.preferences.StepLengthPreference 
      android:key="length" 
      android:title="@string/length_setting" 
      android:summary="@string/length_setting_details" 
      android:dialogTitle="@string/length_setting_title" 
      android:defaultValue="20" /> 

    <com.example.myapp.preferences.BodyWeightPreference 
      android:key="body_weight" 
      android:title="@string/weight_setting" 
      android:summary="@string/weight_setting_details" 
      android:dialogTitle="@string/weight_setting_title" 
      android:defaultValue="50" /> 

    <ListPreference 
      android:key="exercise_type" 
      android:title="@string/type_setting" 
      android:summary="@string/type_setting_details" 
      android:entries="@array/type_preference" 
      android:entryValues="@array/type_preference_values" 
      android:dialogTitle="@string/type_setting_title" 
      android:defaultValue="running" /> 

    <ListPreference 
      android:key="maintain" 
      android:title="@string/maintain_setting" 
      android:summary="@string/maintain_setting_details" 
      android:entries="@array/maintain_preference" 
      android:entryValues="@array/maintain_preference_values" 
      android:dialogTitle="@string/maintain_setting_title" 
      android:defaultValue="none" /> 

</PreferenceCategory> 


</PreferenceScreen> 

Comment puis-je résoudre ce problème selon les nouvelles politiques de sécurité Google. Votre application (s) a une implémentation dangereuse où les classes PreferenceActivity peuvent être sensibles à l'injection de fragments. set exporté = false pour le PreferenceActivity affecté dans votre manifeste Implémentation incorrecte de isValidFragment Comment peuvent-ils être corrigés?

+1

Avez-vous essayé de faire ce que le message a suggéré? 'set exporté = false pour la PreferenceActivity affectée dans votre manifeste? –

+0

comment puis-je remplacer isValidFragment dans la classe ci-dessus –

+0

exported = false, son ne fonctionne pas dans mon scenerio –

Répondre

0

Ce code fonctionne parfaitement pour moi:

public class MyPrefrence extends PreferenceActivity { 

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


    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new MyPreferenceFragment()) 
      .commit(); 

} 

public static class MyPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

}