1. 程式人生 > >Android-8.0適配

Android-8.0適配

本知識點只是個人見解,具體知識及使用請查閱官網,以免被誤導,同時大家可以對此文發表自己的見解。

閱讀本文之前最好先看看官網的對8.0系統的全面講解

我們需要自己動手去檢視新特性,以便用已知的知識來解決未知的問題


8.0新增和優化了很多功能,以上是部分截圖

再來看看本文的適配內容包括:

1 啟動頁適配

2 android 8.0 手機版本更新,系統內新版本安裝適配

3 渠道通知適配

4 圖示適配

5 超長螢幕尺寸適配

6 後臺執行限制適配建議(對後臺服務和隱式廣播的限制)

最後給出了一些獲取最新andrid系統的網站


1 啟動頁適配

新版本剛剛發,顯示就用使用者反饋更新後無法啟動,然後我就趕緊去找bug,發現了這個錯誤.

有一句是這樣的Only fullscreen opaque activities can request orientation

,也就是說只有全屏不透明的activity才可以設定方向,既然知道問題所在就好辦了。

原因

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

解決

a 如果不考慮配置螢幕方向的話,直接去掉方向的設定即可解決問題

android:screenOrientation="portrait" 去掉即可

注意:此處需要注意儲存好頁面資料,否則螢幕旋轉會導致頁面重新建立。

b 如果,去掉透明屬性的話,就需要解決app啟動白屏(黑屏)的問題,白屏或者黑屏是根據App使用的主題來顯示的,下面會給出官方的解決方案

如果既要固定螢幕方向,又解決啟動過慢導致的白(黑)屏問題,以下辦法可以解決:

1.找到你設定透明的Activity,然後在他的theme中將android:windowIsTranslucent改為false
eg:<item name="android:windowIsTranslucent">false</item>

2.再加入<item name="android:windowDisablePreview">true</item>就搞定了。

注意:使用 主題屬性是用來關閉啟動應用程式時系統程序繪製的初始空白螢幕。但是,與未禁止預覽視窗的應用程式相比,此方法可能會導致更長的啟動時間。
此外,它會強制使用者在活動啟動時等待而沒有任何反饋,無法讓使用者知道應用程式是否正常工作。
Goodle針對以上啟動白屏或者黑屏給出瞭解決方案:我們建議您不要禁用預覽視窗,而要遵循常見的 Material Design模式。您可以使用活動的 windowBackground主題屬性為開始活動提供簡單的自定義繪圖。例如,您可以建立一個新的可繪製檔案,並從佈局XML和應用程式清單檔案中引用它,如下所示:Layout XML file:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
  <!-- The background color, preferably the same as your normal theme -->
  <item android:drawable="@android:color/white"/>
  <!-- Your product logo - 144dp color version of your app icon -->
  <item>
    <bitmap
      android:src="@drawable/product_logo_144dp"
      android:gravity="center"/>
  </item>
</layer-list>
然後設定<item name="android:windowBackground">@drawable/your xml file</item>然後在Manifest file宣告activity的時候新增主題:<activity ...android:theme="@style/AppTheme.Launcher" />ok,大功告成!!如果需要轉回正常主題,轉換回正常主題的最簡單方法是在呼叫 setTheme(R.style.AppTheme) 之前呼叫super.onCreate()setContentView()
public class MyMainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // Make sure this is before calling super.onCreate
    setTheme(R.style.Theme_MyApp);
    super.onCreate(savedInstanceState);
    // ...
  }
}

2  8.0的新版本的安裝適配

安裝適配問題在8.0及以上的模擬器上面是需要的,不然無法安裝裝置。但是親測,在小米的8.0部分機型和華為部分8.0機型即使沒有適配也是可以安裝的,安裝前勾選下未知來源apk的風險即可。所以在新版本apk能夠正常覆蓋的情況下,就不必適配了,當然適配是個坑,用不用看大家自己了

解決:
1、在清單檔案中增加請求安裝許可權

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

2、申請開啟未知來源許可權。

3、開啟未知來源授權列表,開啟許可權。

大家用自己原來的許可權申請邏輯也是可以的,我做好了註釋.

public static boolean installApp(final Context context, final File appFile) {

    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //版本判斷
            boolean b = context.getPackageManager().canRequestPackageInstalls();
            if (b) {
                toInstallApp(context, appFile); //有許可權就直接安裝
} else {
                sDefaultRationale = new DefaultRationale(); //申請許可權的對話方塊說明
sPermissionSetting = new PermissionSetting(context);//申請許可權失敗,跳轉到設定介面
//棧頂沒有activity,無法請求許可權
if (com.reds.didi.view.ActivityManager.getTopActivity() == null){
                    return false;
}
                AndPermission.with(com.reds.didi.view.ActivityManager.getTopActivity())
                        .permission(Manifest.permission.REQUEST_INSTALL_PACKAGES)//申請許可權
                        .rationale(sDefaultRationale)
                        .onGranted(new Action() {
                            @Override
public void onAction(List<String> permissions) {
                                ToastUtil.showToast("許可權設定成功!");
toInstallApp(context, appFile); //申請成功直接安裝
}
                        })
                        .onDenied(new Action() {
                            @Override
public void onAction(@NonNull List<String> permissions) {
                                ToastUtil.showToast("許可權設定失敗!");
toInstallApp(context, appFile);//申請失敗也安裝,萬一成功了呢?
                                if (AndPermission.hasAlwaysDeniedPermission(com.reds.didi.view.ActivityManager.getTopActivity(), permissions)) {
                    //使用者總是拒絕許可權,則引導只設置介面,防止找不到開啟的位置
                                    sPermissionSetting.showSetting(permissions);
}
                            }
                        })
                        .start();
}
        } else {
            toInstallApp(context, appFile);
}
        return true;
} catch (Exception e) {
        e.printStackTrace();
}
    return false;
}

private static void toInstallApp(Context context, File appFile) {
    if (sPermissionSetting != null) {
        sPermissionSetting.release();
sPermissionSetting = null;
}
    if (sDefaultRationale != null) {
        sDefaultRationale.release();
sDefaultRationale = null;
}

    Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //此處涉及到的android7.0的適配,後面歐文給出了具體方案
        Uri fileUri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".fileProvider", appFile);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(fileUri, "application/vnd.android.package-archive");
} else {
        intent.setDataAndType(Uri.fromFile(appFile), "application/vnd.android.package-archive");
}
    if (context.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {
        context.startActivity(intent);
}
}

這裡直接給出7.0的適配方案

1 建立類FileProvider

import android.support.v4.content.FileProvider;
public class UpdateFileProvider extends FileProvider {
}
2 在AndroidManifest檔案中宣告<provider>標籤
<provider
android:name="com.reds.didi.weight.version.UpdateFileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
    <meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/new_app_file_paths"/>
</provider>

3 在res目錄下建立xml檔案,然後建立


<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
name="external_files"
path="." />
    <root-path
name="root_path"
path="." />
</paths>

ok! 具體用法上面給出了哦!

3 系統通知適配

Google這次對於8.0系統通知渠道的推廣態度還是比較強硬的。

如下異常:

# main(1)

android.app.RemoteServiceException

Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)


同時首先,如果你升級了appcompat庫,那麼所有使用appcompat庫來構建通知的地方全部都會進行廢棄方法提示,如下所示:

上圖告訴我們,此方法已廢棄,需要使用帶有通知渠道的方法才行。

當然,Google也並沒有完全做絕,即使方法標為了廢棄,但還是可以正常使用的。可是如果你將專案中的targetSdkVersion指定到了26或者更高,那麼Android系統就會認為你的App已經做好了8.0系統的適配工作,當然包括了通知欄的適配。這個時候如果還不使用通知渠道的話,那麼你的App的通知將完全無法彈出。因此這裡給大家的建議就是,一定要適配。如果未適配成功,請留言給我!

先來看看我自己寫的

/**
 * 建立通知
 */
private void setUpNotification() {
    if (mDismissNotificationProgress) {
        return;
}

    mBuilder = new NotificationCompat.Builder(this,"newversion");
mBuilder.setContentTitle("開始下載")
            .setContentText("正在連線伺服器")
            .setSmallIcon(R.mipmap.lib_update_app_update_icon)
            .setLargeIcon(AppUpdateUtils.drawableToBitmap(AppUpdateUtils.getAppIcon(DownloadService.this)))
            .setOngoing(true)
            .setAutoCancel(true)
            .setWhen(System.currentTimeMillis());
//8.0系統適配
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        mNotificationManager.createNotificationChannel(getNotificationChannel()); //在通知顯示前呼叫
}
    mNotificationManager.notify(NOTIFY_ID, mBuilder.build());
}
建立通知渠道號
@RequiresApi(api = Build.VERSION_CODES.O)
public NotificationChannel  getNotificationChannel(){ //設定quda
    String channelId = "newversion";
String channelName = "升級夜遊團新版本";
    int importance = NotificationManager.IMPORTANCE_DEFAULT;
    return new NotificationChannel(channelId, channelName, importance);
}

至於為什麼需要適配渠道,渠道是什麼,如何區分渠道,新的系統通知欄如何互動,

請看官方視訊及介紹 

或者郭霖大佬的部落格

4 圖示適配

如果你將targetSdkVersion指定到了26,但是卻沒有進行Android 8.0系統的應用圖示適配,那麼會出現什麼樣的效果呢?這裡我舉幾個反面示例:


在androidStudio中,按下Windows:Ctrl+Shift+A / Mac:command+shft+A 快捷鍵,並輸入Image Asset,如下所示:

點選回車鍵開啟Asset Studio編輯器,在這裡就可以進行應用圖示適配了。

這個Asset Studio編輯器非常簡單好用,一學就會。左邊是操作區域,右邊是預覽區域。

先來看操作區域,第一行的Icon Type保持預設就可以了,表示同時建立相容8.0系統以及老版本系統的應用圖示。第二行的Name用於指定應用圖示的名稱,這裡也保持預設即可。接下來的三個頁籤,Foreground Layer用於編輯前景層,Background Layer用於編輯背景層,Legacy用於編輯老版本系統的圖示。

再來看預覽區域,這個就十分簡單了,用於預覽應用圖示的最終效果。在預覽區域中給出了可能生成的圖示形狀,包括圓形、圓角矩形、方形等等。注意每個預覽圖示中都有一個圓圈,這個圓圈叫作安全區域,必須要保證圖示的前景層完全處於安全區域當中才行,否則可能會出現圖示被手機廠商的mask裁剪掉的情況。

5 超長螢幕尺寸適配

系統根據Android作業系統級別控制完成操作的方式:

  • 如果您的應用目標為Android 8.0(API級別26)或更高,則根據其佈局填充整個螢幕。
  • 如果您的應用目標為Android 7.1(API等級25)或更低,則系統會將應用介面的大小限制為16:9(大約1.86)的視窗。如果應用程式在螢幕寬高比較大的裝置上執行,則該應用程式會顯示在16:9的信箱中,從而導致部分螢幕未使用。

如果您的應用佈局無法適應任意大的縱橫比,您可以通過設定最大縱橫比在所有Android作業系統級別上明確宣告手機的最大橫縱比。我們建議比例為2.4(12:5)。

要為Android 8.0(API級別26)和更高級別設定最大寬高比,請在您的<activity>程式碼中使用最大比率 以下示例顯示如何宣告2.4的最大寬高比:

<!-- Render on full screen up to screen aspect ratio of 2.4 --><!-- Use a letterbox on screens larger than 2.4 -->

<activityandroid:maxAspectRatio="2.4"> ...</activity>

對於Android 7.1及更低版本,新增 <meta-data>元素中指定android.max_aspect 的元素,如下所示:

<!-- Render on full screen up to screen aspect ratio of 2.4 -->

<!-- Use a letterbox on screens larger than 2.4 -->

<meta-dataandroid:name="android.max_aspect"android:value="2.4"/>

如果您設定了最大寬高比,請不要忘記也設定 android:resizeableActivity false否則,最大寬高比不起作用。

android:resizeableActivity 是設定在<application> 標籤上面的,例如

 <application
        android:name=".DidiApplication"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:resizeableActivity="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:uiOptions="splitActionBarWhenNarrow"
        tools:replace="android:icon,android:theme,android:allowBackup"
        tools:targetApi="n">


        <!--android:screenOrientation="portrait"-->
        <activity
            android:name=".view.module.didi.activity.WellComeActivity"
            android:launchMode="singleTop"
            android:theme="@style/AppTheme.Splash"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

注意:如果您的應用不可調整大小,您應該測試它在儘可能多的裝置上的行為。檢查所有控制元件是否可見。有些裝置讓使用者強制應用程式進入全屏顯示,這將調整它們的大小。參考自Google中文文件 https://developer.android.google.cn/guide/practices/screens-distribution

6 後臺執行限制適配建議

後臺適配這塊,坑比較多,每個手機業務不同,策略不同,只能給出建議來,讓自己去斟酌

這裡先給出以前大佬給出的方案和相關知識點:

以下是8.0的關於service的新增的知識點:

6.1 後臺服務限制

先來了解一些基本概念:

在後臺中執行的服務會消耗裝置資源,這可能降低使用者體驗。 為了緩解這一問題,系統對這些服務施加了一些限制。也就是說無法在後臺去啟動"後臺服務"了.

這裡解釋下什麼是後臺服務,解決辦法可以從以下概念入手:

系統可以區分 前臺 和 後臺 應用。 (用於服務限制目的的後臺定義與記憶體管理使用的定義不同;一個應用按照記憶體管理的定義可能處於後臺,但按照能夠啟動服務的定義又處於前臺。)如果滿足以下任意條件,應用將被視為處於前臺:

  • 具有可見 Activity(不管該 Activity 已啟動還是已暫停)。
  • 具有前臺服務。
  • 另一個前臺應用已關聯到該應用(不管是通過繫結到其中一個服務,還是通過使用其中一個內容提供程式)。 例如,如果另一個應用繫結到該應用的服務,那麼該應用處於前臺:

    • IME
    • 桌布服務
    • 通知偵聽器
    • 語音或文字服務

如果以上條件均不滿足,應用將被視為處於後臺

 處於前臺時,應用可以自由建立和執行前臺服務與後臺服務。 進入後臺時,在一個持續數分鐘的時間窗內,應用仍可以建立和使用服務。在該時間窗結束後,應用將被視為處於 空閒 狀態。 此時,系統將停止應用的後臺服務,就像應用已經呼叫服務的“”方法。

在這些情況下,後臺應用將被置於一個臨時白名單中並持續數分鐘。 位於白名單中時,應用可以無限制地啟動服務,並且其後臺服務也可以執行。

處理對使用者可見的任務時,應用將被置於白名單中,例如:

在很多情況下,您的應用都可以使用  作業替換後臺服務。 例如,CoolPhotoApp 需要檢查使用者是否已經從朋友那裡收到共享的照片,即使該應用未在前臺執行。

那麼我們可以從前臺應用角度入手,去保活和啟動服務例如,在後臺的時候讓前臺服務或者應用去啟動一個後臺服務(此處按自己應用的邏輯去處理) 下面會給出具體的解決方案。那麼官網給我們的建議是什麼呢?

同樣,建議之前先了解下以下概念:

Android 8.0 引入了一種全新的方法,即 Context.startForegroundService(),以在前臺啟動新服務。

在系統建立服務後,應用有五秒的時間來呼叫該服務的  方法以顯示新服務的使用者可見通知。

注意: 如果應用在此時間限制內呼叫 ,則系統將停止服務並宣告此應用為 ANR

參照以上概念,官網的建議是:

  • 如果處於後臺時您的應用需要建立一個前臺服務,請使用新的API NotificationManager.startServiceInForeground()方法,而不是建立一個後臺服務,然後嘗試將其推到前臺。
  • 如果服務容易被使用者注意,請將其設為前臺服務。 例如,播放音訊的服務始終應為前臺服務。您應該使用 NotificationManager.startServiceInForeground(),而不是  建立服務。
  • 發生網路事件時,請使用 FCM 選擇性地喚醒您的應用,而不是在後臺輪詢。

  • 在應用正常處於前臺之前,請推遲後臺工作。

5.1 廣播限制

 Android 8.0 的應用無法繼續在其清單中為隱式廣播註冊廣播接收器

那麼這句話怎麼理解呢? 也就是說隱式廣播在清單中註冊了,當你在後臺的時候,廣播發送出去了,你的app是無法響應這些廣播的

那麼需要解釋""隱式廣播" 是什麼意思?

隱式廣播是一種不專門針對該應用的廣播。 例如, 就是一種隱式廣播,因為它將傳送到註冊的所有偵聽器,讓後者知道裝置上的某些軟體包已被替換。

不過, 不是隱式廣播,因為不管已為該廣播註冊偵聽器的其他應用有多少,它都會只發送到軟體包已被替換的應用。

  • 應用可以繼續在它們的清單中註冊顯式廣播。
  • 需要簽名許可權的廣播不受此限制所限,因為這些廣播只會傳送到使用相同證書籤名的應用,而不是傳送到裝置上的所有應用。

在許多情況下,之前註冊隱式廣播的應用使用  作業可以獲得類似的功能。

那麼也就是說,我們只要傳送針對我們自己app的廣播入手,或者是動態的去註冊接收器還是可以解決這個問題的.

同樣,官網給的建議方法是: 檢查在您應用的清單中定義的廣播接收器。 如果您的清單為顯式廣播聲明瞭接收器,您必須予以替換。 可能的解決方法包括:

  • 使用計劃作業檢查條件是否會觸發隱式廣播。(測試!測試!測試!)

最後,需要注意點的是一定要相容最新版本!一定要相容最新版本!一定要相容最新版本

最新的Android系統釋出網站及諮詢,可以經常逛逛csdn或者其他網站如:

相關推薦

Android 8.0

Android 8.0  Android O Api 26 8.0適配主要是以下7個方面: 1.自適應啟動圖示,讓app支援圓形圖示 參考這裡就夠了郭霖的專欄 2.動態許可權申請 例子:比如你申請了讀sd卡許可權,在8.0以前,你還可以寫sd卡。      

Android-8.0

本知識點只是個人見解,具體知識及使用請查閱官網,以免被誤導,同時大家可以對此文發表自己的見解。閱讀本文之前最好先看看官網的對8.0系統的全面講解我們需要自己動手去檢視新特性,以便用已知的知識來解決未知的問題8.0新增和優化了很多功能,以上是部分截圖再來看看本文的適配內容包括:

Android 8.0之應用圖示

前言:Android 8.0系統出來這麼久了,也是時候來適配一下了。8.0 系統修改的地方挺多的,但是需要我們程式猿開發適配的倒不是很多。這篇部落格主要介紹8.0系統適配中的應用圖示適配。 在Android 7.1系統之前APP的應用圖示都是mipmap中的靜態圖片andr

我們來一探究竟 Android 7.0 中 FileProvider 部分

rip 使用 star 過程 限制 需要 lock 目錄文件 support 本文標簽: Android7.0 FileProvider 由於 Android 7.0 或更高版本的系統在國內手機市場上的占比不是很高,很多 Android 開發人員並沒有做 7.0 適配工作,

butterknife 接入、使用和Android studio3.0問題

看到許多關於butterknife的文章,介紹的都特別詳細,就是太複雜了,不方便使用,升級Android studio之後出現和butter knife適配的問題,今天記下來,方便之後使用 一、接入 1、在moudle的gradle中 compile 'com.jakew

Android 8.1規範及常見問題處理方式,讓你一口吃上“奧利奧”

熱文導讀 | 點選標題閱讀來源:OPPO開發者平臺(ID:OPPOMOBILEOPEN)據 An

Android 7.0 afinal報錯

最近專案碰到7.0版本執行直接閃退 錯誤日誌如下 com.android.internal.policy.DecorContext cast to activity 通過列印日誌和檢視原始碼得知 net.tsz.afinal.AFinalUIHelp

螢幕——系統升級android 8.0 部分UI出現錯亂——“可用螢幕解析度”

這兩天將自己的mate9從7.0升級到8.0發現一個問題,app的某個ui介面部分錯亂了;因為螢幕適配使用了dimens適配,所以猜測有可能螢幕規格沒有覆蓋到;但是發現mate9的螢幕解析度為1920*1080,查看了dimens檔案是有覆蓋的,為什麼7.0時候沒有問題,升級到8.0出現

Android 8.0通知欄推送及

上一篇我們確保了我們開啟了通知欄的許可權,那麼接下來就是傳送推送了,廢話不多說,上程式碼。 首先我們判斷手機版本號,Android版本大於8.0的時候呢,我們需要進行一下通道的操作才可:判斷版本號程式碼接好 //此處判斷安卓版本號是否大於或者等於Android8.0 if (Build.VE

Android 8.0通知欄許可權開啟

使用手機時,我們經常會碰到各種通知,例如微信,QQ,瀏覽器等等,不厭其煩的給你各種推送,本文將演示通知的大致流程 首先,我們在一個適當的時機檢查我們App的通知欄許可權 boolean Jurisdiction = NotificationManagerCompat.from(AppAppl

Android 8.0 升級筆記(圖片、通知欄、ContentProvider、Receiver)

Android 8.0 升級筆記 前言 Google 在2017年就釋出了Android 8.0,並且強制AppStore上得應用都要升級,國內得不曉得。為了防止出現之前升級6.0 得時候許可權問題導致Crash這種情況得發生…這次很小心得去看了Google得升級意見,小夥伴們可以自

Android 8.0 通知

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

關於Android中通知欄的講解及Android 8.0

前言 通知欄是Android系統原創的一個功能,雖然喬布斯一直認為Android系統是徹徹底底抄襲IOS的一個產品,但是通知欄確實是Android系統原創的,反而蘋果在ios 5之後也加入了類似的通知欄功能。 通知欄的設計非常巧妙,他預設情況下不佔用任何空間,只有當用戶需要的時候用手

Android 8.0(Oreo)

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

Android 8.0通知欄

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

Android 8.0 P詳細指南

前言 最近 Google 爸爸對 Google Play 上架的應用提出了目標 API 等級要求 從 2018 年 8 月 1 日起,所有向 Google Play 首次提交的新應用都必須針對 Android 8.0 (API 等級 26) 開發; 2018 年 1

android 8.0 notification通知踩坑

老專案通知這塊要適配8.0, 所以按照老套路 開啟百度 深入andoid notificion 8.0 ctrl c and ctrl+v 一頓熟悉的操作, 然後測試執行專案 ! 尼瑪, 不行!! 在8.0上不行 ,心裡一頓的問候, 然後開始網上各種解決辦法對比,自己的程式碼跟別人說的一樣啊 加一個

一起來學習Android 8.0系統的通知欄

大家早上好,今天我們繼續來學習Android 8.0系統的適配。之前我們已經講到了,Androi

Android 實現應用更新 Android O (Android 8.0)

之前寫過一篇 Android 實現應用更新(適配Anndroid N),本篇主要講解Android O(Android 8.0)上應用更新的適配問題,應用更新的完整實現請結合上一篇文章一起,文末也會給出完整程式碼連結。 最近測試反饋在Android 8.0的手

Android 8.0新特性測試報告來啦!

WeTest 導讀谷歌2017 I/O開發者大會上釋出了Android 8.0的正式版, 其官方代號為Oreo(奧利奧)。網上關於Android8.0新功能特性的介紹已鋪天蓋地,新功能特性會對程式應用帶來哪些影響呢,我們從相容性角度來看下這部分變化。 測試版本:Android 8.0  安裝啟動測試 A