Android 問題集

記錄一些代碼小細節

 

1.Android 啓動頁android.intent.action.MAIN,啓動模式不能設置爲singleTask
這樣會使你每次回到手機主頁,再次進入APP,回到啓動頁。

如果真的要將之前的啓動頁設置singleTask。可以將啓動頁換成一張空白頁。
空白頁上直接調轉到之前的啓動頁上。
例子:我之前的啓動頁是一張登錄頁面。登錄頁面需要將啓動模式設置爲singleTask.
所以當前啓動頁設置爲空白頁,直接跳轉到登錄頁,登錄頁的啓動模式還是設置singleTask,這樣就不會出錯了

 

2.關於文件讀取問題

先排除文件過大,文件不存在和讀取權限問題。
然後接下來就是Api29Q版本的問題了。問題有以下2 個:
open failed: EACCES (Permission denied)和BitmapFactory.decodeFile問題 。
因爲N版本文件的讀取方式發生了改變,如果想繼續使用原先的方式讀取。在AndroidManifest.xml加入以下代碼:

  <application android:requestLegacyExternalStorage="true" ... >
       ...
     </application>

 

參考網址:Android Q(10.0 API29)版本新特性和兼容性適配

3.關於Http和Https的問題

這個也是Api27P版本之後的問題。27版本之後如果不經過特殊處理,網絡方式必須是https
但也有方式在高版本使用http。
先在res文件中創建xml目錄,然後在其下創建xml文件。文件內容以下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config> 

最後在AndroidManifest.xml加入以下代碼:

<application
...
 android:networkSecurityConfig="@xml/network_security_config" />

參考網址:網絡請求http/https問題

4.關於連續點擊Toast不顯示問題

 if (toast == null) {
        toast = Toast.makeText(mContext, s, Toast.LENGTH_SHORT);
 } else {
        //解決連續點擊toast不顯示問題
        toast.cancel();
        toast = Toast.makeText(mContext, s, Toast.LENGTH_SHORT);
 }
  toast.show();

5.關於使用AndroidAutoSize後,系統的複製粘貼,顯示的特別小的問題

關於這個問題,官方推薦是使用副單位。如果在已經成型的項目裏,這個方法不可行。然後我就找到了折中的方法。
先在彈出複製粘貼彈窗的時候取消適配,然後在點擊屏幕的時候確定適配。

isCancleAdapter 判斷是否取消適配

edText.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
            @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                //取消適配
                AutoSize.cancelAdapt((Activity) mContext);
                isCancleAdapter = true;
            }
        });
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        //點擊屏幕,如果有點擊適配的時候,纔去重新適配
        if (isCancleAdapter){
            AutoSize.autoConvertDensityOfGlobal((Activity) mContext);
            isCancleAdapter = false;
        }
        return super.dispatchTouchEvent(ev);
    }

 

未完待續。。。

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