Android targetSdk從22到26的坑

因應(yīng)用市場的要求,需要將targetSdkVersion的版本改變?yōu)?6+,所以才有了本篇文章的由來

一.權(quán)限問題

毋庸置疑,以前targetSdkVersion是22就是懶得處理權(quán)限導(dǎo)致的,應(yīng)了一句話,欠下的總要還的.


在這里插入圖片描述

舉個(gè)栗子,以前你想使用系統(tǒng)相機(jī)進(jìn)行拍照.代碼會是這樣的.

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
        startActivityForResult(intent, PHOTO_REQUEST_TAKEPHOTO);

升級之后的代碼應(yīng)該是這樣的.

        /*
         * 如果是6.0以上才去判斷是否需要判斷運(yùn)行時(shí)權(quán)限,6.0以下不考慮
         */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION);
                return;
            }
        }else{
           
        }

申請權(quán)限的回調(diào)

   @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case CAMERA_PERMISSION:
                if (permissions[0].equals(Manifest.permission.CAMERA)) {
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                       //申請成功之后,跳轉(zhuǎn)拍照界面
                    }
                }
                break;
            default:
                break;
        }
    }


二. 應(yīng)用間共享文件問題.

Android 7.0 行為變更 通過FileProvider在應(yīng)用間共享文件

所以如果你還是使用剛才那個(gè)打開相機(jī)的代碼,你會發(fā)現(xiàn),就算有了權(quán)限,照樣crash.所以你還需要以下操作.

1. 如下圖所示.在res文件目錄下新建一個(gè)xml文件目錄,并且創(chuàng)建一個(gè)xml文件,文件內(nèi)容是自定義需要共享的文件夾.

image.png

2. AndroidManifest.xml 中配置如下代碼

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>


3. 打開相機(jī)的代碼也要做出如下改變.

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (intent.resolveActivity(getPackageManager()) != null) {
                /*
                 * 指定拍照存儲路徑
                 * 7.0 及其以上使用FileProvider替換'file://'訪問
                 */
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    //這里的BuildConfig寸五,需要是程序包下BuildConfig。
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", photoFile));
                    intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                } else {
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                }
                startActivityForResult(intent, PHOTO_REQUEST_TAKEPHOTO);
            }

三. 打開服務(wù)的問題.

1. Android8.0之后不能悄悄的打開后臺服務(wù)嘍,不然你的應(yīng)用同樣會crash,所以你需要添加以下代碼

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            int NOTIFICATION_ID = (int) (System.currentTimeMillis()%10000);
            NotificationChannel channel = new NotificationChannel("hh","name", NotificationManager.IMPORTANCE_HIGH);
            NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            manager.createNotificationChannel(channel);
            Notification notification = new Notification.Builder(getApplicationContext(),"hh").build();
            startForeground(NOTIFICATION_ID,notification);
        }

2. Android 8.0 還對特定函數(shù)做出了以下變更:

  • 如果針對 Android 8.0 的應(yīng)用嘗試在不允許其創(chuàng)建后臺服務(wù)的情況下使用 startService() 函數(shù),則該函數(shù)將引發(fā)一個(gè) IllegalStateException。
  • 新的 Context.startForegroundService() 函數(shù)將啟動一個(gè)前臺服務(wù)。現(xiàn)在,即使應(yīng)用在后臺運(yùn)行,系統(tǒng)也允許其調(diào)用 Context.startForegroundService()惨险。不過,應(yīng)用必須在創(chuàng)建服務(wù)后的五秒內(nèi)調(diào)用該服務(wù)的 startForeground() 函數(shù)脊髓。

四. 發(fā)送廣播問題.

你會發(fā)現(xiàn)在8.0上發(fā)送廣播接收不到了,尷尬不,意外不.<< Android8.0 靜態(tài)receiver接收不到隱式廣播>>

加上一行如下代碼就沒事了

 intent.setPackage(getPackageName());

喜歡請點(diǎn)擊+關(guān)注哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辫愉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子将硝,更是在濱河造成了極大的恐慌恭朗,老刑警劉巖屏镊,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冀墨,居然都是意外死亡闸衫,警方通過查閱死者的電腦和手機(jī)涛贯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門诽嘉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弟翘,你說我怎么就攤上這事虫腋。” “怎么了稀余?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵悦冀,是天一觀的道長。 經(jīng)常有香客問我睛琳,道長盒蟆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任师骗,我火速辦了婚禮历等,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辟癌。我一直安慰自己寒屯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布黍少。 她就那樣靜靜地躺著寡夹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厂置。 梳的紋絲不亂的頭發(fā)上菩掏,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機(jī)與錄音昵济,去河邊找鬼智绸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛砸紊,可吹牛的內(nèi)容都是我干的传于。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼醉顽,長吁一口氣:“原來是場噩夢啊……” “哼沼溜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起游添,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤系草,失蹤者是張志新(化名)和其女友劉穎通熄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體找都,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唇辨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了能耻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赏枚。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晓猛,靈堂內(nèi)的尸體忽然破棺而出饿幅,到底是詐尸還是另有隱情,我是刑警寧澤戒职,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布栗恩,位于F島的核電站,受9級特大地震影響洪燥,放射性物質(zhì)發(fā)生泄漏磕秤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一捧韵、第九天 我趴在偏房一處隱蔽的房頂上張望市咆。 院中可真熱鬧,春花似錦纫版、人聲如沸床绪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癞己。三九已至,卻和暖如春梭伐,著一層夾襖步出監(jiān)牢的瞬間痹雅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工糊识, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绩社,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓赂苗,卻偏偏與公主長得像愉耙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子拌滋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

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