專案android 6.0,7.0 版本適配問題
之前專案沒有考慮到android 6.0 及以上版本的適配問題,後來再APP中加百度lbs地圖時,遇到華為榮耀8定位不了的問題。
1 android 6.0以上的部分危險許可權需要通過執行時動態申請。
2 android 6.0對應的api 23,將android編譯版本換成23,才可以找到@TargetApi(value = Build.VERSION_CODES.M) Build.VERSION_CODES.M表示android 6.0
3 之前把最低版本設為api 16,發現程式碼中指定編譯版本為android 6.0 也即Build.VERSION_CODES.M時找不到,將編譯api改為23後,出現一些相容錯誤。例如:
(1) android sdk 23,Google 移出了Apache HttpClient相關的類,推薦使用HttpUrlConnection,如果需要繼續使用Apache HttpClient,需要在libs中新增org.apache.http.legacy.jar
和HttpClient一樣,HttpResponse類也被移除了,解決方法如上所述,jar檔案位置在sdk目錄下\platforms\android-23\optional資料夾中
(2) android 6.0 The method sin(float) is undefined for the type FloatMath 報錯
Android6.0使用 Math.floor 代替 FloatMath.floor 即可
(3) The method initializeScrollbars(TypedArray) is undefined for the type PLA_AbsListView
initializeScrollbars android 6.0中該方法不存在,使用反射機制找到被遮蔽
final TypedArray a = context.getTheme().obtainStyledAttributes(new int[0]);
try {
// initializeScrollbars(TypedArray)
Method initializeScrollbars = Android.view.View.class.getDeclaredMethod("initializeScrollbars", TypedArray.class);
initializeScrollbars.invoke(this , a);
} catch (Exception e) {
e.printStackTrace();
}
4 公司測試機比較少,也就後來才用高版本的手機測試,像華為榮耀8只開啟app定位許可權不夠,還需要檢測總開關定位服務有沒有開啟,如果沒有開啟總開關,檢測定位許可權都是無效的。所以首先檢測總定位服務有沒有開啟。
/**
* 判斷GPS是否開啟,GPS或者AGPS開啟一個就認為是開啟的
* @param context
* @return true 表示開啟
*/
public static final boolean isOPenLocService(final Context context) {
LocationManager locationManager
= (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 通過GPS衛星定位,定位級別可以精確到街(通過24顆衛星定位,在室外和空曠的地方定位準確、速度快)
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// 通過WLAN或行動網路(3G/2G)確定的位置(也稱作AGPS,輔助GPS定位。主要用於在室內或遮蓋物(建築群或茂密的深林等)密集的地方定位)
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gps || network) {
return true;
}
return false;
}
if(TyhcApplication.isOPenLocService(this)){
// 先彈出提示框
pumpCallDialog();
}else{
final Dialog pumpDialog = Custom_dialog.pumpDialog(this, "溫馨提示", "手機定位服務未開啟,不能定位", "取消", "開啟位置服務");
Custom_dialog.setConfirmListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pumpDialog.dismiss();
//開啟定位服務總開關介面
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
});
Custom_dialog.setCancleListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pumpDialog.dismiss();
}
});
}
protected void pumpCallDialog() {
final Dialog dialog1 = Custom_dialog.pumpDialog(this, "門店定位",
"請手持手機,站在門店正中央位置進行精準定位", "取消", "開始定位");
Custom_dialog.setCancleListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog1.dismiss();
}
});
Custom_dialog.setConfirmListener(new OnClickListener() {
@Override
public void onClick(View v) {
PermissionGen.needPermission(ApplyChildShopActivity.this, 100,
android.Manifest.permission.ACCESS_FINE_LOCATION);
dialog1.dismiss();
}
});
}
@PermissionSuccess(requestCode = 100)
public void startLocation() {
locationService.start();// 定位SDK
}
/
@PermissionFail(requestCode = 100)
public void failApply() {
Toast.makeText(this, "定位許可權獲取失敗",
Toast.LENGTH_SHORT).show();
}
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
PermissionGen.onRequestPermissionsResult(this, requestCode,
permissions, grantResults);
}
上面只是定位許可權開啟,後來模仿百度地圖一樣,在歡迎頁就開始檢測app中需要的許可權是否開啟,儲存許可權必須開啟才能進入app
if (ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this,
android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
||ContextCompat.checkSelfPermission(this,
android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
||ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
||ContextCompat.checkSelfPermission(this,
android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
pumpDialog();
} else {
進入首頁
}
Dialog dialog = null;
public void pumpDialog() {
View view = View.inflate(this, R.layout.dialog_permission, null);
dialog = new Dialog(this, R.style.transparentFrameWindowStyle);
dialog.setContentView(view, new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
Window window = dialog.getWindow();
window.setGravity(Gravity.CENTER);
WindowManager.LayoutParams wl = window.getAttributes();
wl.dimAmount = 0.3f;
wl.gravity = Gravity.CENTER;
wl.width = ViewGroup.LayoutParams.WRAP_CONTENT;
wl.height = ViewGroup.LayoutParams.WRAP_CONTENT;
// 設定顯示位置
dialog.onWindowAttributesChanged(wl);
// 設定點選外圍解散
dialog.setCanceledOnTouchOutside(true);
dialog.show();
dialog.getWindow().setAttributes(wl);
dialog.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
Button btn_next = (Button) view.findViewById(R.id.btn_next);
btn_next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PermissionGen
.with(SplashActivity.this)
.addRequestCode(100)
.permissions(android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.CAMERA,
android.Manifest.permission.READ_CONTACTS,
android.Manifest.permission.CALL_PHONE).request();
dialog.cancel();
}
});
}
@PermissionSuccess(requestCode = 100)
public void readPreference() {
//進入首頁
}
@PermissionFail(requestCode = 100)
public void failRead() {
}
private void pumpStorage() {
final Dialog pumpDialog = Custom_dialog.pumpDialog(this, "溫馨提示",
"儲存許可權是必須的,否則APP無法讀取執行所需的儲存檔案", "取消", "確定");
Custom_dialog.setConfirmListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pumpDialog.cancel();
PermissionGen.needPermission(SplashActivity.this, 100,
android.Manifest.permission.READ_EXTERNAL_STORAGE);
}
});
Custom_dialog.setCancleListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pumpDialog.dismiss();
finish();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
for (int i = 0; i < permissions.length; i++) {
if ("android.permission.READ_EXTERNAL_STORAGE"
.equals(permissions[i]) && grantResults[i] == -1) { //如果儲存許可權沒開啟
pumpStorage();
break;
}
}
PermissionGen.onRequestPermissionsResult(this, requestCode,
permissions, grantResults);
}
5 android 6.0 引入的是動態許可權限制,android 7.0則是“私有目錄被限制”
相關推薦
專案android 6.0,7.0 版本適配問題
之前專案沒有考慮到android 6.0 及以上版本的適配問題,後來再APP中加百度lbs地圖時,遇到華為榮耀8定位不了的問題。 1 android 6.0以上的部分危險許可權需要通過執行時動態申請。 2 android 6.0對應的api 23,將an
Android apk升級 相容6.0 7.0 低版本 華為手機
上篇部落格寫了用DownloadManager,進行下載,結果發現有些手機並不能相容,查詢原因是DownloadManager.Request 的setDestinationInExternalPublicDir()函式問題,這直接根源掛鉤,Request 有個
Android 拍照和相簿功能(適配Android 6.0和7.0系統和華為機型問題)
眾所周知,呼叫相機拍照和相簿中獲取圖片的功能,基本上是每個程式App必備的。 實現適配Android每個版本,國內手機,要處理的問題卻也不少。例如:Android6.0許可權問題,Android7.0 FileProvider問題,華為手機相簿獲取不到圖片的問
android 6.0 7.0 8.0 在Service中彈出對話方塊適配
在網上找了很多文章大家都再說8.0的懸浮窗許可權不開想要彈出對話方塊就要使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY然而我的在華為8.0 p
mac下更新自帶的PHP版本到5.6或7.0
script 需要 export mil 配置 install bin pan pat 下載和安裝PHP 5.6 打開終端並且運行如下命令: curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6 然後,PHP
Android 呼叫相機、相簿(適配6.0)
又好久沒有寫部落格了,好習慣不能斷,該寫點就得寫點,今天帶來的筆記是關於Android 專案呼叫系統相機 與呼叫系統相簿的之後拿到照片的基本操作,我感覺好多人還是不太熟悉的哈。專案相容 Android 5.0裝置、Android 6.0裝置、Android 7.0、Android 8.0
Android 6.0 / 7.0 / 8.0 的APK安裝
Android 1.x~6.x APK安裝 關於 android 7.0 之前的 apk安裝,需要注意設定 Intent.FLAG_ACTIVITY_NEW_TASK 就好 Intent intent = new Intent(Intent.ACTION_VIEW);
android 下載apk後安裝apk(適配android 7.0)
為適配7.0以後系統,首先需要在AndroidManifest.xml檔案中application節點下定義provider,如下: <provider android:nam
unity+android:大版本更新安裝下好的apk,相容任意安卓5.0,7.0,8.0版本
Android Studio 1:在專案的res目錄下建立xml目錄,再建立file_paths.xml檔案。 <?xml version="1.0" encoding="utf-8"?> <paths> <root-pa
解決方案之Android 國際化資源完美相容6.0,7.0,8.0
在Android世界中,一般App應用的語言是根據Android系統顯示的語言變化的,但是有時候有些應用需要單獨設定App的顯示語言。 Android 國際化實現 國際化一般最常用的是支援簡體中文和美式英文。 思路: 切換Project檢視 建立多個國家的資原始
Android 關於6.0,7.0許可權的那點事
前言:最近把專案 targetSdkVersion 從22直接升級到27,因此就需要對新的動態許可權相關問題進行一籮筐的操作。寫這篇文章總結一下。 我在專案裡用的是EasyPermission工具類進行的動態許可權判斷。首先,在build.gradle中新增依賴: imp
碩思閃客精靈6.0破解版(含7.0破解補丁)6.0/7.0/8.0/9.0版本
碩思閃客精靈6.0破解版(含7.0破解補丁)6.0/7.0/8.0/9.0版本,他可以幫助你把網上下載的FLASH進行反編。 碩思閃客精靈破解版下載 碩思閃客精靈註冊碼版下載 然後通過flash專業進行編輯,改成自己想要的畫面或者文字以及連結等。他能夠輕鬆反編譯一個或是多個SWF格式檔案為FLA/FLE
Android 6.0 7.0及以上 動態許可權
android 6.0版本開始,google粑粑處於安全性考慮,敏感的許可權只在manifest註冊已經不可以了(例如攝像頭許可權,定位許可權等等),需要在程式碼中動態註冊。 以下對許可權做一些介紹(轉載): 以下是需要單獨申請的許可權,共分為9組,每組只要有一個許可權申
android 6.0, 7.0之動態申請許可權完美解決方案
android 7.0 動態申請許可權工具類 對於實際開發的程式原來說,對許可權申請肯定不會陌生.由於android 6.0 之後有些許可權不僅需要在 mainfest中註冊,
Android 5.0 6.0 7.0新特性
Android在5.0:最主要的一個特性就是加入了RecycleView這個元件,可以替代ListView和GridView ,其他的功能就是支援多種裝置,全新的通知中心,多工視窗有了卡片式設計, Android6.0:新特性 主要有許可權管理,支付相關,指紋支援,電池優化等 其他的
MySQL 4.1/5.0/5.1/5.5/5.6/5.7各版本的主要區別
mysql的50版本和51版本的區別: 一、5.0 增加了Stored procedures、Views、Cursors、Triggers、XA transactions的支援,增加了INFORATION_SCHEMA系統資料庫。 二、5.1 增加了Event sched
Android 7.0呼叫系統相機適配筆記
對於Android N以下,檔案直接Uri.fromFile(file)就可以直接使用,Audroid N 即編譯app的版本 compileSdkVersion 24時,此時會報出FileUriExposedException異常,解釋如下: 對於面向 Android
Android圓形頭像設定(實現相機、相簿選擇並裁剪)相容6.0/7.0
Android圓形頭像設定(實現相機、相簿選擇並裁剪)相容Android 7.0/6.0 Android7.0新增了許可權修改、目錄被限制訪問、多視窗 等等,最近在做頭像設定的時候,執行到Android7.0的機子上,拍照和進相簿都報錯:FileUriExpo
C# 6.0/7.0 的新特性
const con use 新特性 小夥伴 必須 switch 寫法 相同 轉眼C#語言都已經叠代到7.0版本了,很多小夥伴都已經把C# 7.0 的新特性應用到代碼中了,想想自己連6.0的新特性都還很少使用,今天特意搜集了一下6.0和7.0的一些新特性,記錄一下,方便查閱。
Centos下Yum安裝PHP 5.5、5.6、7.0
mbstring eas common mysql 編譯安裝 test .rpm mysq cli Centos系統自帶的php版本很低,如果我們需要使用高版本的php,可以不用編譯安裝,直接用yum安裝會非常省時省力。 1.檢查當前安裝的PHP包yum list inst