你在適配Android 7.0的過程中踩過哪些坑,是如何解決的?
先佔個坑,最近開發外掛化,遇到一些坑,記錄下
1。 7。0 Activity的performStop增加了boolean引數,需要反射呼叫的時候要注意區分
final
void
performStop
(
boolean
preserveWindow
)
2。 7。0的PackageManager增加了3個abstract方法,如果繼承這個類,需要重寫下面的方法,否則在三星的有些機器上會crash
getPackageGids(String packageName,
int
flags)
getPackageUid(String packageName,
int
flags)
hasSystemFeature(String name,
int
version)
Android N為了提高檔案訪問的安全性,限制了應用透過file://方式直接對外提供檔案路徑的功能,嚮應用外部提供這種uri會直接crash。替代方案是使用FileProvider透過content://方式提供這些uri,並進行臨時訪問授權,當然對應的目錄要在xml中註冊才行。典型的例子比如呼叫系統相機拍照並儲存檔案以及使用系統的影象裁剪應用去剪裁照片等。
在做懸浮窗適配的時候,Android 7。0 以下都使用TYPE_TOAST這個type來做懸浮窗,基本能實現不需要申請懸浮窗許可權,就能實現懸浮窗功能。但是在Android 7。1版本上,股溝為了防止懸浮窗濫用,給TYPE_TOAST做了一個duration的限制,只能在視窗內展示1秒左右的限制,所以不得不做許可權申請了。
開始填坑。
從 Android 7。0 開始,系統語言支援多個,可手動排序,系統根據 App 本身支援的語言和手機出廠設定的語言等因素來調整 App 本身的預設語言。
要獲取系統為 App
調整後的預設語言
:
Locale
locale
=
Locale
。
getDefault
();
//Locale。getDefault() 和 LocaleList。getAdjustedDefault()。get(0) 同等效果,還不需要考慮版本問題,推薦直接使用
String
language
=
locale
。
getLanguage
()
+
“-”
+
locale
。
getCountry
();
要獲取系統
真實首選語言
:
Locale
locale
;
if
(
Build
。
VERSION
。
SDK_INT
>=
Build
。
VERSION_CODES
。
N
)
{
locale
=
LocaleList
。
getDefault
()。
get
(
0
);
}
else
locale
=
Locale
。
getDefault
();
String
language
=
locale
。
getLanguage
()
+
“-”
+
locale
。
getCountry
();
好,看完程式碼再多說一點:
系統為 App
調整後的預設語言:
指的是 Android 7。0 下系統根據『使用者在
設定
中增刪和排序後的系統語言列表』結合 『App 國際化支援的語言列表』來為這個 App 調整出的預設語言。比如 App 只做了
簡體中文
的國際化(values、values-zh),系統語言列表是 『英語、簡體中文』,那麼 App 介面會顯示為
簡體中文,
而不是預設語言。
系統
真實首選語言:
即『使用者在
設定
中增刪和排序後的系統語言列表』中的第一個
編輯器沒 Markdown 好用,這裡只寫一下結論。更詳細的踩坑過程釋出在我的部落格了,有興趣的可以去看下。歡迎提出意見和建議。
詳細填坑過程:Android 專案開發填坑記 - 獲取系統語言(相容7。0)
以上更新於2017/05/10
================================================
佔坑。獲取系統預設語言有坑,7。0以後系統語言不再是單選,而且列表優先順序機制,但之前的方法返回的並不一定是真實的語言列表順序。——2017/05/09
前段時間升級到了android studio 2。3,app適配7。0,targetSdkVersion設定25,打包的時候勾選了 單獨使用V2的簽名方式進行簽名打包。
安裝在7。0的機器上是沒有問題的,但安裝在5。1的測試機上就會出現安裝失敗,找不到簽名證書。
網上查閱了一些資料,android7。0使用了一種新的簽名方案——Signature Version V2,單獨使用V2簽名的apk是不能在小於7。0的手機上安裝的,會出現簽名證書找不到的情況,為了防止出現這種情況,AS使用了可以同時選擇兩種簽名方式。即:7。0以下使用V1的簽名方式,7。0以後的就使用V2的簽名方式
一般輸出正式簽名的apk時,目前是需要同時勾選兩種方式進行簽名的。
如下圖: