折腾:
【未解决】Android Studio中gradle编译rcjsta项目多个使用或覆盖了已过时的API等报错
期间,继续尝试解决:
rcsjta/samples/api/tts/src/com/orangelabs/rcs/tts/Main.java:76: 警告: [deprecation] PreferenceActivity中的getPreferenceScreen()已过时
activateCheck = (CheckBoxPreference) getPreferenceScreen().findPreference("activate");
^
代码是:
activateCheck = (CheckBoxPreference) getPreferenceScreen().findPreference("activate");getPreferenceScreen() This method was deprecated in API level 15. This function is not relevant for a modern fragment-based PreferenceActivity. Gets the root of the preference hierarchy that this activity is showing.
deprecation PreferenceActivity getPreferenceScreen
deprecated PreferenceActivity getPreferenceScreen
deprecated android getPreferenceScreen
android getPreferenceScreen 过期
换成:getPreferenceManager
activateCheck = (CheckBoxPreference) getPreferenceManager().findPreference("activate");去看看具体实现
android/preference/PreferenceActivity.java
/**
* Returns the {@link PreferenceManager} used by this activity.
* @return The {@link PreferenceManager}.
*
* @deprecated This function is not relevant for a modern fragment-based
* PreferenceActivity.
*/
@Deprecated
public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}也提示Deprecated过期了
是有:
/**
* Used to help create {@link Preference} hierarchies
* from activities or XML.
* <p>
* In most cases, clients should use
* {@link PreferenceActivity#addPreferencesFromIntent} or
* {@link PreferenceActivity#addPreferencesFromResource(int)}.
*
* @see PreferenceActivity
*/
public class PreferenceManager {
/**
* Finds a {@link Preference} based on its key.
*
* @param key The key of the preference to retrieve.
* @return The {@link Preference} with the key, or null.
* @see PreferenceGroup#findPreference(CharSequence)
*/
public Preference findPreference(CharSequence key) {
if (mPreferenceScreen == null) {
return null;
}
return mPreferenceScreen.findPreference(key);
}重新编译看看效果
结果类似错误:
rcsjta/samples/api/tts/src/com/orangelabs/rcs/tts/Main.java:77: 警告: [deprecation] PreferenceActivity中的getPreferenceManager()已过时
activateCheck = (CheckBoxPreference) getPreferenceManager().findPreference("activate");
^android getPreferenceManager 过期
getPreferenceManager Added in API level 1 Deprecated in API level 29 public PreferenceManager getPreferenceManager () Gets the PreferenceManager that manages this Preference object's tree.
但是显示api 大于29才会过期
而此处项目中,sdk只有23,按道理不会过期才对:
build.gradle
ext {
compileSdkVersion = 23
minSdkVersion = 12
targetSdkVersion = 23
}android getPreferenceManager Deprecated
有人弄了个库:
放在PreferenceFragment中用getPreferenceManager
去移动过去:
public class Main extends PreferenceActivity implements Preference.OnPreferenceChangeListener {
private CheckBoxPreference activateCheck;
/**
* List of permissions needed for service Just need to ask one permission per dangerous group
*/
private static final Set<String> sAllPermissionsList = new HashSet<>(
Arrays.asList(Manifest.permission.READ_CONTACTS));
private static final int MY_PERMISSION_REQUEST_ALL = 5428;
private Set<String> mPermissionsToAsk;
public static class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.tts_preferences);
activateCheck = (CheckBoxPreference) getPreferenceManager().findPreference("activate");
activateCheck.setOnPreferenceChangeListener(this);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
askPermissions();
// Set title
setTitle(R.string.app_title);
// Set preferences
// addPreferencesFromResource(R.xml.tts_preferences);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
// activateCheck = (CheckBoxPreference) getPreferenceScreen().findPreference("activate");
// activateCheck.setOnPreferenceChangeListener(this);
}但是发现:
全局变量activateCheck却无法直接赋值了
官网说了:
This class is deprecated.
Use PreferenceFragmentCompat instead
建议换PreferenceFragmentCompat
A PreferenceFragmentCompat is the entry point to using the Preference library. This Fragment displays a hierarchy of Preference objects to the user. It also handles persisting values to the device.
期间去:
【已解决】rcsjta中rcs/tts/Main.java和原先3个apk即core和RI和settings的关系
-》所以,看起来:即使代码写错了,暂时也影响不大。
当然,尽量还是代码正常为好。
那就大胆的去用PreferenceFragmentCompat改造代码
万一真的出错,到时候再去调试即可
所以现在接着去:
【未解决】Android Studio中用PreferenceFragmentCompat实现rcsjta的tts的参数设置页面
转载请注明:在路上 » 【未解决】rcsjta项目编译出错:警告deprecation PreferenceActivity中的getPreferenceScreen()已过时