Nordic의 DFU 라이브러리에서 설정값을 가져오는데, 'SETTINGS_NUMBER_OF_PACKETS' is deprecated 라면서 해당 상수에 가로줄이 그어졌다. 


찾아보니 이 deprecated 는 안드로이드 버전이 업그레이드 되면서 다른 것으로 대체된 경우, 지원이 끊긴 경우 등에서 발생한다.


deprecated가 되었어도 계속 지원을 해주는 경우도 있다고는 하지만, 가장 좋은 방법은 현재 디바이스의 버전을 확인하여 그에 따라 호환성을 제공하는 것이다.


지금 문제가 되는 DFU 라이브러리에서 상수가 정의된 부분을 찾아보았더니, 


This constant is now deprecated. Please, use {@link DfuServiceInitiator#setPacketsReceiptNotificationsValue(int)} to set it.

라고 한다. 


Nordic의 github에 있는 nRF-Toolbox의 코드(공식 어플이다)를 보면, 다음과 같이 설정한다. 

final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
final SharedPreferences.Editor editor = preferences.edit();
final boolean keepBond = preferences.getBoolean(SettingsFragment.SETTINGS_KEEP_BOND, false);
final boolean forceDfu = preferences.getBoolean(SettingsFragment.SETTINGS_ASSUME_DFU_NODE, false);
final boolean enablePRNs = preferences.getBoolean(SettingsFragment.SETTINGS_PACKET_RECEIPT_NOTIFICATION_ENABLED,
                                                Build.VERSION.SDK_INT < Build.VERSION_CODES.M);
String value = preferences.getString(SettingsFragment.SETTINGS_NUMBER_OF_PACKETS,
                                            String.valueOf(DfuServiceInitiator.DEFAULT_PRN_VALUE));

int numberOfPackets;
try {
    numberOfPackets = Integer.parseInt(value);
} catch (final NumberFormatException e) {
    numberOfPackets = DfuServiceInitiator.DEFAULT_PRN_VALUE;
}

final DfuServiceInitiator starter = new DfuServiceInitiator(mSelectedDevice.getAddress())
        .setDeviceName(mSelectedDevice.getName())
        .setKeepBond(keepBond)
        .setForceDfu(forceDfu)
        .setPacketsReceiptNotificationsEnabled(enablePRNs)
        .setPacketsReceiptNotificationsValue(numberOfPackets)
        .setUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(true);
 


SETTINGS_PACKET_RECEIPT_NOTIFICATION_ENABLED 상수의 경우, DfuSettingsConstants.java 파일에 "settings_packet_receipt_notification_enabled" 라는 문자열로 저장되어 있다. 그래서 자동으로 defValue인 false가 enablePRNs라는 변수에 들어가게 되는 것이고.


참고로 SharedPreference란 UI에 대한 간단한 정보들을 저장할 수 있는 임시 저장소 같은 공간이다. 여기에 저장된 값들은 화면이 전환되었을 때 이전 값을 다시 세팅해주는 등을 하는데에 사용될 수 있다.



참고


[안드로이드] Deprecated 되는건 기준이 뭐죠?


안드로이드 deprecated

'안드로이드' 카테고리의 다른 글

serializable, parcelable  (0) 2017.11.24
안드로이드 Bundle  (0) 2017.11.24
FLAG_ACTIVITY_NEW_TASK  (0) 2017.11.23
안드로이드 Intent, Task  (0) 2017.11.22
마시멜로우 권한 요청 시 [화면 오버레이 감지됨] 발생  (0) 2017.11.20
블로그 이미지

NCookie

,