android各版本的相容問題
阿新 • • 發佈:2019-02-04
自動安裝
在Android7.0自動安裝做出了修改,android8.0增加了許可權
//以前
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
//android 7.0需要用到共享檔案provider的方式,不能識別file://需要將其轉為uri Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri contentUri = FileProvider.getUriForFile(context, "com.zjhc.jxzq.jxzq.fileprovider", file); intent.setDataAndType(contentUri, "application/vnd.android.package-archive"); startActivity(intent); //AndroidManifist.xml中配置 <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.zjhc.jxzq.jxzq.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> //res下新建xml目錄,新建file_paths.xml檔案 <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path path="apk" name="app-release"/> </paths> 注意:儲存路徑需要新建apk目錄,Environment.getExternalStorageDirectory()對應external-path
//android8.0需要寫入許可權
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
//許可權校驗
boolean b =getPackageManager().canRequestPackageInstalls();
if(!b){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 1000);
}
開啟服務
android 8.0開啟前臺服務,正對startService()更改成使用startForegroundService()。
現場保活時,系統對電量進行了進一步的優化,如果不考慮點亮可以嘗試將應用加入電量優化的白名單
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.O){ PowerManager powerManager = (PowerManager) activity.getSystemService(POWER_SERVICE); boolean hasIgnored = powerManager.isIgnoringBatteryOptimizations(activity.getPackageName()); // 判斷當前APP是否有加入電池優化的白名單,如果沒有,彈出加入電池優化的白名單的設定對話方塊。 if (!hasIgnored) { Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + activity.getPackageName())); activity.startActivity(intent); } }