Android適配8.0的坑

無法安裝更新APK

經(jīng)過搜索發(fā)現(xiàn)我們在AndroidManifest新增一個權(quán)限

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

異常: Only fullscreen opaque activities can request orientation

最近我升級到27之后發(fā)現(xiàn)突然分享界面報錯,類似下面這種

 java.lang.IllegalStateException: Only fullscreen activities can request orientation

最后發(fā)現(xiàn)是因?yàn)檎{(diào)用這樣的代碼

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

經(jīng)過搜索發(fā)現(xiàn)26的增加設(shè)置方向的判斷

public static boolean isTranslucentOrFloating(TypedArray attributes) { 
    final boolean isTranslucent = attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsTranslucent, false); 
    final boolean isSwipeToDismiss = !attributes.hasValue( com.android.internal.R.styleable.Window_windowIsTranslucent) 
                                     && attributes.getBoolean( com.android.internal.R.styleable.Window_windowSwipeToDismiss, false); 
    final boolean isFloating = attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating, false);  
    return isFloating || isTranslucent || isSwipeToDismiss;    
}

根據(jù)上面的定義崎弃,如果一個Activity的Style符合下面三個條件之一惶桐,認(rèn)為不是“fullscreen”:

  1. “windowIsTranslucent”為true;
  2. “windowIsTranslucent”為false淀歇,但“windowSwipeToDismiss”為true易核;
  3. “windowIsFloating“為true;

綜上可見房匆,這個改動的目的是想阻止非全屏的Activity鎖定屏幕旋轉(zhuǎn)耸成,因?yàn)楫?dāng)前Activity是透明的报亩,浮動的或可滑動取消的,是否鎖屏應(yīng)該由全屏的Activity決定井氢,而不是并沒有全部占據(jù)屏幕的Activity決定弦追。

解決方法:
只要你設(shè)置不符合上面三個條件即可,而且這個坑27已經(jīng)沒有了花竞。


定位相關(guān)

為降低功耗劲件,無論應(yīng)用的目標(biāo) SDK 版本為何,Android 8.0 都會對后臺應(yīng)用檢索用戶當(dāng)前位置的頻率進(jìn)行限制约急。

如果您的應(yīng)用在后臺運(yùn)行時依賴實(shí)時提醒或運(yùn)動檢測零远,這一位置檢索行為就顯得特別重要,必須緊記厌蔽。

重要說明:作為起點(diǎn)牵辣,我們只允許后臺應(yīng)用每小時接收幾次位置更新。我們將在整個預(yù)覽版階段繼續(xù)根據(jù)系統(tǒng)影響和開發(fā)者的反饋優(yōu)化位置更新間隔奴饮。
詳細(xì)可以點(diǎn)開這個官方說明
也就是如果持續(xù)的定位需求纬向,必須通過一個通知開啟一個前臺服務(wù)
解決方法:
我是如此寫的(語言為Kotlin)戴卜,其實(shí)就是很簡單的開啟一個前臺服務(wù)

class LocationForegoundService : Service() {

    private val mBinder = LocalBinder()

    private var channel:NotificationChannel ?= null

    inner class LocalBinder : Binder() {
        fun getService(): LocationForegoundService = this@LocationForegoundService
    }

    override fun onBind(intent: Intent): IBinder {
        return mBinder
    }

    override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
        //Android O上才顯示通知欄
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            showNotify()
        }
        return super.onStartCommand(intent, flags, startId)
    }

    //顯示通知欄
    private fun showNotify() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            if (channel == null){
                channel = createNotificationChannel()
            }
            val builder = NotificationCompat.Builder(applicationContext, packageName)
            val nfIntent = Intent(this, MainActivity::class.java)
            builder.setContentIntent(PendingIntent.getActivity(this, 0, nfIntent, 0))
                    .setLargeIcon(BitmapFactory.decodeResource(this.resources, R.mipmap.ic_launcher))
                    .setSmallIcon(R.drawable.push_notification_icon)
                    .setContentTitle("正在后臺定位")
                    .setContentText("定位進(jìn)行中")
                    .setWhen(System.currentTimeMillis())
            val notification = builder.build()
            //調(diào)用這個方法把服務(wù)設(shè)置成前臺服務(wù)
            startForeground(110, notification)
        }
    }


    @TargetApi(Build.VERSION_CODES.O)
    private fun createNotificationChannel(): NotificationChannel {
        val channel = NotificationChannel(packageName,
                "",
                NotificationManager.IMPORTANCE_HIGH)
        // 獲取NotificationManager
        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
                as NotificationManager
        // 創(chuàng)建通知渠道
        notificationManager.createNotificationChannel(channel)
        return channel
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末师脂,一起剝皮案震驚了整個濱河市吃警,隨后出現(xiàn)的幾起案子泳桦,更是在濱河造成了極大的恐慌,老刑警劉巖灸撰,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浮毯,死亡現(xiàn)場離奇詭異,居然都是意外死亡壳鹤,警方通過查閱死者的電腦和手機(jī)饰迹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锹淌,“玉大人,你說我怎么就攤上這事赂摆。” “怎么了绊谭?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵达传,是天一觀的道長喷楣。 經(jīng)常有香客問我,道長铣焊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任曲伊,我火速辦了婚禮坟募,結(jié)果婚禮上邑狸,老公的妹妹穿的比我還像新娘。我一直安慰自己单雾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布屿储。 她就那樣靜靜地躺著够掠,像睡著了一般茄菊。 火紅的嫁衣襯著肌膚如雪赊堪。 梳的紋絲不亂的頭發(fā)上竖哩,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天期丰,我揣著相機(jī)與錄音,去河邊找鬼钝荡。 笑死街立,一個胖子當(dāng)著我的面吹牛赎离,可吹牛的內(nèi)容都是我干的端辱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荣病,長吁一口氣:“原來是場噩夢啊……” “哼渗柿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颊亮,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤终惑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雹有,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯嗓,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脯厨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了临梗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吃沪,死狀恐怖票彪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情降铸,我是刑警寧澤摇零,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站谅畅,受9級特大地震影響噪服,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粘优,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一敬飒、第九天 我趴在偏房一處隱蔽的房頂上張望芬位。 院中可真熱鬧,春花似錦英染、人聲如沸被饿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哎垦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間墨闲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工鸳碧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞻离,地道東北人仔夺。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像日裙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子昂拂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容