Android問題總彙

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>

其他說明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章