Android問題總彙
1. Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW
問題原因
通過分析Log和網上查找最終找到的錯誤原因:Context中有一個startActivity方法,Activity繼承自Context,重載了startActivity方法。如果使用Activity的startActivity方法,不會有任何限制,而如果使用Context的startActivity方法的話,就需要開啓一個新的的task,遇到這個異常,是因爲使用了Context的startActivity方法(通常發生在你想在一個service或者廣播接收器裏面調用startActivity方法)。解決辦法是,加一個flag。
解決方案
Intent i = new Intent(this, Wakeup.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
其他說明
最後這個問題只發生在Android6.0版本以及以下的版本,這些版本你必須強制添加這個Flag纔可以,但是在Android7.0版本及以上則不會發生(應該是源碼進行了兼容),但是Android9.0版本似乎再度強調了需要這個Flag,所以我們一般可以加上這樣的判斷:
if((Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)){
//TODO
}
2.CLEARTEXT communication ** not permitted by network security policy
問題原因
在Android P(API 28)系統的設備上,默認要求使用加密連接。譬如,默認只能使用HTTPS進行通信,若強行使用HTTP通信,則會得到上面的異常。
解決方案
- 1.創建
res/xml/network_security_config.xml
文件,內容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
- 2.在
AndroidManifest.xml
下的application
標籤增加networkSecurityConfig
屬性:
<application
android:networkSecurityConfig="@xml/network_security_config"
>
</application>
其他說明
無