开机logo的用户可选实现
1. 全志A40i ANDROID 7.1.1的平台,会将bootloader 分区挂载到文件系统,且具备读写属性。而开机logo就存在这个位置。/bootloader/bootlogo.bmp
我们主要讲解bootlogo 的可选实现方式
1.首先我们需要将客户需要预装的开机logo ,安装到系统中。在vendor/device 中添加一个目录存放需要预装的文件,再利用product mk 将文件打包到system.img
PRODUCT_COPY_FILES += \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/botologo,system/etc/bootlogo)
2.在display_settings.xml 中增加布局
<ListPreference
android:key="bootlogo_select"
android:title="@string/bootlogo_select"
android:summary="@string/bootlogo_summary"
android:entries="@array/bootlogo_entries"
android:entryValues="@array/bootlogo_values" />
3.在custom.xml 中添加list资源内容
</string-array>
<string-array name="bootlogo_entries">
<item>default</item>
<item>Acura</item>
<item>Audi</item>
<item>BAIC</item>
<item>Bentley</item>
<item>BMW</item>
<item>Brabus</item>
<item>Buick</item>
<item>BYD</item>
<item>Cadillac</item>
<item>CCAG</item>
<item>Chery</item>
<item>Chevrolet</item>
<item>Chrysler</item>
<item>Citroen</item>
<item>Dodge</item>
<item>Fiat</item>
<item>Ford</item>
<item>Geely</item>
<item>GMC</item>
<item>Great Wall</item>
<item>Haval</item>
<item>Honda</item>
<item>Hyundai</item>
<item>Isuzu</item>
<item>JAC</item>
<item>Jaguar</item>
<item>JEEP</item>
<item>Kia</item>
<item>Lamborghini</item>
<item>Lexus</item>
<item>Lifan</item>
<item>Lincoln</item>
<item>Luxgen</item>
<item>Maserati</item>
<item>Mazda</item>
<item>Mercedes-Benz</item>
<item>MG</item>
<item>Mitsubishi</item>
<item>Nissan</item>
<item>Opel</item>
<item>Peugeot</item>
<item>Porsche</item>
<item>Range Rover</item>
<item>Renault</item>
<item>Roewe</item>
<item>Rolls-Royce</item>
<item>SGMW</item>
<item>Skoda</item>
<item>Ssang Yong</item>
<item>Suzuki</item>
<item>TATA</item>
<item>Toyota</item>
<item>Volkswagen</item>
<item>Volvo</item>
</string-array>
<string-array name="bootlogo_values">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>10</item>
<item>11</item>
<item>12</item>
<item>13</item>
<item>14</item>
<item>15</item>
<item>16</item>
<item>17</item>
<item>18</item>
<item>19</item>
<item>20</item>
<item>21</item>
<item>22</item>
<item>23</item>
<item>24</item>
<item>25</item>
<item>26</item>
<item>27</item>
<item>28</item>
<item>29</item>
<item>30</item>
<item>31</item>
<item>32</item>
<item>33</item>
<item>34</item>
<item>35</item>
<item>36</item>
<item>37</item>
<item>38</item>
<item>39</item>
<item>40</item>
<item>41</item>
<item>42</item>
<item>43</item>
<item>44</item>
<item>45</item>
<item>46</item>
<item>47</item>
<item>48</item>
<item>49</item>
<item>50</item>
<item>51</item>
<item>52</item>
<item>53</item>
<item>54</item>
<item>55</item>
</string-array>
4.添加系统默认属性Settings.System.BOOTLOGO_SHOW,实现参考上一节内容添加自定义默认系统属性
5.在DisplaySettings.java 中增加处理
private static final String KEY_BOOT_LOGO = "bootlogo_select";
private ListPreference mBootlogoPreference;
mBootlogoPreference = (ListPreference) findPreference(KEY_BOOT_LOGO);
if (mBootlogoPreference != null) {
int v =Settings.System.getInt(resolver, Settings.System.BOOTLOGO_SHOW, 1);
mBootlogoPreference.setValue(String.valueOf(v));
mBootlogoPreference.setOnPreferenceChangeListener(this);
}
if (preference == mNightModePreference) {
try {
final int value = Integer.parseInt((String) objValue);
final UiModeManager uiManager = (UiModeManager) getSystemService(
Context.UI_MODE_SERVICE);
uiManager.setNightMode(value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist night mode setting", e);
}
}
if (preference == mBootlogoPreference) {
try {
final int value = Integer.parseInt((String) objValue);
setbootlogo(value);
Settings.System.putInt(getContentResolver(),Settings.System.BOOTLOGO_SHOW,value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist night mode setting", e);
}
}
private boolean copyFile(File src, File dst) {
long inSize = src.length();
long outSize = 0;
try {
if (!dst.exists()) {
return false;
}
FileInputStream in = new FileInputStream(src);
FileOutputStream out = new FileOutputStream(dst);
int length = -1;
byte[] buf = new byte[1024];
while ((length = in.read(buf)) != -1) {
out.write(buf, 0, length);
outSize += length;
int temp = (int) (((float) outSize) / inSize * 100);
}
out.flush();
in.close();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
private void setbootlogo(int v){
CharSequence[] chars = mBootlogoPreference.getEntries();
String str =chars[v].toString();
if(copyFile(new File("/system/etc/bootlogo/"+str+".bmp"),new File("/bootloader/bootlogo.bmp"))){
}else{
Toast.makeText(mContext,"bootlogo set fail your mast set it again",Toast.LENGTH_LONG);
}
}