1. 程式人生 > >Android適配-版本適配

Android適配-版本適配

一、同一個api在不同版本都存在,只是api的一些介面方法有變更。

這種情況是最好處理的,只要對版本號做判斷,對應的系統版本用相應的api方法就好了。為了好維護,建議做一個簡單的封裝。

舉例說明如下:

比如Notification在不同版本的相容,舉例如下:

首先開啟谷歌官方文件,看看文件裡面的一些說明:

1.Notification這個類是added in API level 1,一直都有,只是具體某些方法有變更。繼續往下看。

2.這個類有個說明,意思是Notification.Builder是新增的一個內部類,用它建立通知更方便。接著往下看。

A class that represents how a persistent
notification is to
be presented to the user using the NotificationManager. The Notification.Builder has been added to make it easier to construct Notifications.

3.Public constructors公共的構造方法,其中有3個引數的這個在api 11過時,它被Notification.Builder替代了。

Notification(int icon, CharSequence tickerText, long when)

This constructor was deprecated in
API level 11. Use Notification.Builder instead.

4.常量

  • EXTRA_LARGE_ICON This constant was deprecated in API level 26. Use getLargeIcon(), which supports a wider variety of icon sources.(在API級別26中已棄用。使用getLargeIcon(),它支援更多種圖示源。)

  • EXTRA_SMALL_ICON This constant was deprecated in API level 26. Use getSmallIcon(), which supports a wider variety of icon sources.(在API級別26中已棄用。使用getSmallIcon(),它支援更多種圖示源。)

  • FLAG_HIGH_PRIORITY This constant was deprecated in API level 16. Use priority with a positive value.(在api16被棄用,請使用正數priority值替代)

  • FLAG_SHOW_LIGHTS This constant was deprecated in API level 26. use shouldShowLights().(在API級別26中已棄用。請使用 shouldShowLights() 替代)

  • PRIORITY_DEFAULT This constant was deprecated in API level 26. use IMPORTANCE_DEFAULT instead.(在API級別26中已棄用。請使用 IMPORTANCE_DEFAULT 替代)

  • PRIORITY_HIGH This constant was deprecated in API level 26. use IMPORTANCE_HIGH instead.(在API級別26中已棄用。請使用 IMPORTANCE_HIGH 替代)

  • PRIORITY_LOW This constant was deprecated in API level 26. use IMPORTANCE_LOW instead.(在API級別26中已棄用。請使用 IMPORTANCE_LOW 替代)

  • PRIORITY_MAX This constant was deprecated in API level 26. use IMPORTANCE_HIGH instead.(在API級別26中已棄用。請使用 IMPORTANCE_HIGH 替代)

  • PRIORITY_MIN This constant was deprecated in API level 26. use IMPORTANCE_MIN instead.(在API級別26中已棄用。請使用 IMPORTANCE_MIN 替代)

  • STREAM_DEFAULT This constant was deprecated in API level 21. Use getAudioAttributes() instead.(在API級別21中已棄用。請使用 getAudioAttributes() 替代)

5.欄位Fields

  • audioAttributes 在api 26棄用. 使用 getAudioAttributes() 替代.

  • audioStreamType 在api 21棄用. 使用 audioAttributes 替代.

  • defaults 此欄位在API 26棄用。使用getSound()shouldShowLights()shouldVibrate()

  • icon 此欄位已在API級別26中棄用。使用setSmallIcon(Icon)替代。

  • largeIcon This field was deprecated in API level 23. Use `setLargeIcon(Icon) instead.

  • ledARGB This field was deprecated in API level 26. use `shouldShowLights().

  • ledOffMS This field was deprecated in API level 26. use `shouldShowLights().

  • ledOnMS This field was deprecated in API level 26. use shouldShowLights().

  • priority This field was deprecated in API level 26. use getImportance() instead.

  • sound This field was deprecated in API level 26. use getSound() instead.

  • vibrate This field was deprecated in API level 26. use getVibrationPattern().

二、Android 8.0適配報錯:Only fullscreen opaque activities can request orientation解決方案:

出現的原因:絕大多數都是因為我們為了提高使用者體驗,手動取消App啟動白屏或者黑屏的時候,將Splash介面設為了透明,然後這個時候又設定了方向為垂直,從而導致了這個問題。

解決方案:

  • 1.找到你設定透明的Activity,然後在他的theme中將android:windowIsTranslucent改為false

      <item name="android:windowIsTranslucent">false</item>
    
  • 2.再加入下面這行程式碼就搞定了。

      <item name="android:windowDisablePreview">true</item>
    

三、Android8.0版本更新相關api適配

  • 建立通知渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            NotificationChannel mChannel = new NotificationChannel("channel_01",
                    "訊息推送", NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(mChannel);
        }
  • 建立Notification
Context context = DJApplication.getInstance();
        Notification.Builder builder = new Notification.Builder(context);
        builder.setTicker("開始下載");
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setLargeIcon(BitmapFactory.decodeResource(DJApplication.getInstance().getResources(), 
            R.mipmap.ic_launcher));
        builder.setAutoCancel(true);
        PendingIntent pIntent = PendingIntent.getActivity(context, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentTitle("下載中");
        builder.setContentIntent(pIntent);
        builder.setContentText(text);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            builder.setChannelId("channel_01");//設定有效的通知渠道 ID,這個ID要和之前建立時候的Channel_ID相同
        }
        manager.notify(1,  builder.build());
  • 安裝apk許可權

在 Android 8.0 中,安裝未知應用許可權提高了安裝未知來源應用時的安全性。此許可權與其他執行時許可權一樣,會與應用繫結,在安裝時進行提示,確保使用者授予使用安裝來源的許可權後,此許可權才會提示使用者安裝應用。在執行 Android 8.0 或更高版本的裝置上使用此許可權時,惡意下載程式將無法騙取使用者安裝未獲得預先授權的應用,所以我們需要加入安裝apk檔案的許可權。

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

相關推薦

Android-版本

一、同一個api在不同版本都存在,只是api的一些介面方法有變更。這種情況是最好處理的,只要對版本號做判斷,對應的系統版本用相應的api方法就好了。為了好維護,建議做一個簡單的封裝。舉例說明如下:比如Notification在不同版本的相容,舉例如下:首先開啟谷歌官方文件,看

Android中的版本

       隨著Android版本的更新,更多的Android效能被開發出來,為了在我們的應用中也用到這些效能又要兼顧以前的舊版本,這時我們要做到系統版本的適配。一般情況下,我們在更新app到最新Android版本時,最好要先保證新版本的app能夠支援90%的裝置。   

Android 一行程式碼版本更新(到Android8.0)

做Android 專案的時候一般都需要在App內版本更新,以前自己寫過,今天介紹的不是自己的,是一個開源,功能比較強大,一句話實現版本更新功能 一、依賴 compile 'com.allenliu.versionchecklib:library:2.0.5' 二、程式碼 AllenVer

Android最佳實踐之SystemBar狀態列全版本方案

前言 自從MD設計規範出來後,關於系統狀態列的適配越受到關注,因為MD在5.0以後把系統狀態列的顏色改為可由開發者配置的,而在5.0之前則無法指定狀態列的顏色,所以這篇就說說使用Toolbar對系統狀態列的適配策略 主流App的適配效果 手Q在這方面適

僅僅是個人記錄:Android 的機型: 螢幕(包括dpi,dp,sp的概念) 版本 硬體。 以及如何和美工配合

最重要的適配就是尺寸適配,我們可以有兩種方案: 第一種方案,以某一個尺寸,例如1920*1080為基準的,在檔案中修改 http://blog.csdn.net/lmj623565791/article/details/45460089         int baseW

專案android 6.0,7.0 版本問題

之前專案沒有考慮到android 6.0 及以上版本的適配問題,後來再APP中加百度lbs地圖時,遇到華為榮耀8定位不了的問題。 1 android 6.0以上的部分危險許可權需要通過執行時動態申請。 2 android 6.0對應的api 23,將an

Android 多屏幕 dp和px的關系 最好用dp

linear title url -h pre ref end 建議 限制 Android 多屏幕適配 dp和px的關系 一直以來別人經常問我,android的多屏幕適配到底是怎麽弄,我也不知道如何講解清楚,或許自己也是挺迷糊。 以下得出的結論主要是結合官方文檔進行分析

Android P的APP總結,讓你快人一步

信息 最新 webview 包名 圖片 bmp illegal 名單 block 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由QQ音樂技術團隊發表於雲+社區專欄 上篇:Android P 行為變更適配 Android P 這次有很多行為變更,其中不

Android中的icon

一、icon的簡介 icon是應用圖示,官方建議將圖示根據不同的dpi放置在res/mipmap資料夾下。 二、icon的發展歷史 1、官方系統 官方系統在8.0前後存在一些區別,在8.0系統之前,android允許自定義icon形狀。7.0系統之開始,對launcher介面做了圓形的限制,8.0系統

Android 資原始檔螢幕

一、圖片適配: mipmap-xhdpi:720P,表示1280x720解析度,用於存放2x切圖 mipmap-xxhdpi:1080P,表示1920x1080解析度,用於存放3x切圖 mipmap-xxxhdpi:2K,表示2560x1440解析度,用於存放4x切圖  

Android通知欄介紹與總結(上篇)

此文已由作者黎星授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 由於歷史原因,Android在釋出之初對通知欄Notification的設計相當簡單,而如今面對各式各樣的通知欄玩法,谷歌也不得不對其進行更新迭代調整,增加新功能的同時,也在不斷地改變樣式,試圖迎合更多

Android修煉之Pie 的搬運工

自嘲時刻 Android P正式版(以下稱為Pie)已經正式上線了,各大廠商已經開始了系統升級工作,咱做上層開發的也得跟上節奏。當然了,新版本所有的行為更改內容都可以在官網上找到,對於其中如何繞開非SDK介面限制的問題,也有各路大神給出瞭解決方案。所以,我只能當

通告!Android 9 Pie未應用公示

8月7日,谷歌正式釋出Android 9 Pie,至今已兩月有餘。近日,華為終端開放實驗室對國內主流應用在Android 9 Pie的相容性進行測試,結果顯示:目前TOP3000應用相容率已經超過95%,但仍有少量應用存在啟動失敗、閃退等嚴重問題。這些問題對滿足

Android 8.0 通知

下面說一下Android O (8.0)(API 26)通知的相關適配 一、分析 Android O 之前開啟一個App的設定的通知是這樣的 傳送一條通知通過下面程式碼 /* * 簡單的傳送通知 */ private void showNotification

Android 8.0(Oreo)

前陣子,市場中心丟來一個鍋,說華為、360、應用寶要求開發者適配 Android P,否則應用將被不推薦、隱藏甚至下架(華為),從 2018 年 8 月 1 日起,所有向 Google Play 首次提交的新應用都必須針對 Android 8.0 (API 等級 26) 開發

Android UI繪製 -- 螢幕

#重要概念 螢幕尺寸 手機對角線的物理尺寸,單位英寸。 常見的有:5寸、5.5寸、6寸等 螢幕解析度 手機在橫向、縱向上的畫素點數總和,單位px。 常見的有:1080x1980、720x1280/480x800等 螢幕畫素密度 每英寸的畫素點數,單位dpi。

Android 8.0通知欄

歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能

Android WebView 超大字號問題

zoom 默認 normal nbsp tex setting div web ngs 目前在使用 Android WebView 展示H5頁面的時候,存在當系統字號設置超大的時候,出現頁面內容展示不全的問題。 此問題是因為Android WebView 默認使用系統字號進

! Android最強螢幕方案對比解析

注: 本文已整理成部落格,見: https://blog.csdn.net/u011200604/article/details/84990040 注: 本文最終方案推薦源於JessYanCoding/AndroidAutoSize 的開源庫(詳見GitHub) 在A

Android面試題-機型之痛,例如三星、小米、華為、魅族等。

原始碼分析相關面試題 Activity相關面試題 Service相關面試題 與XMPP相關面試題 與效能優化相關面試題 與登入相關面試題 與開發相關面試題 與人事相關面試題 由於開源三方定製