2016-12-22 14 views
1

다음은 Java 클래스입니다. 내 프로젝트에서PreferenceActivity의 구현은 프래그먼트 삽입에 취약합니다.

public class MyPrefrences extends PreferenceActivity { 

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

    addPreferencesFromResource(R.xml.preferences); 
} 

}

는 나는이 새로운 구글의 보안 정책에 따라 해결할 수있는 방법을 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> 

을 사용했다. PreferenceActivity 클래스가 Fragment Injection의 영향을받을 수있는 안전하지 않은 구현이 앱에 있습니다. Manifest에서 영향을받는 PreferenceActivity에 대해 exported = false 집합을 사용합니다. isValidFragment의 잘못된 구현 어떻게 수정 될 수 있습니까?

+1

는 메시지가 제안하는 일을 시도해야? '당신의 Manifest에서 영향받은 PreferenceActivity에 대해 exported = false를 설정 했습니까? ' –

+0

위의 클래스에서 isValidFragment를 재정의하려면 –

+0

exported = false, 내 scenerio에서 작동하지 않습니다. –

답변

0

이 코드는 나를 위해 완벽하게 작동합니다 :

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

}