轉載請標明出處,維權必究:https://www.cnblogs.com/tangZH/p/10338377.html 有時候APP需要獲取某些許可權,要讓用戶手動打開,那麼問題來了,若是直接提醒用戶出去找許可權入口,然後自己打開,用戶不一定找得到,因為現在的Android廠家定製的room五花八門,那 ...
轉載請標明出處,維權必究:https://www.cnblogs.com/tangZH/p/10338377.html
有時候APP需要獲取某些許可權,要讓用戶手動打開,那麼問題來了,若是直接提醒用戶出去找許可權入口,然後自己打開,用戶不一定找得到,因為現在的Android廠家定製的room五花八門,那麼用戶覺得不耐煩就有可能流失這部分用戶。
所以,我們需要給用戶一個入口,讓用戶直接在APP裡面跳轉到對應的許可權頁面。但剛剛也說了,現在的Android廠家定製的room五花八門,所以不同的機型或者android版本打開許可權頁面的方法就可能不一樣了,我們得去適配。
網上查了很多資料,什麼中級終極重級的方案都有,雖然這確實能夠解決一些機型的適配,但還是沒能給出一個通用的解決方法。
比如有人說:
跳轉華為的許可權界面該這樣:
private void goHuaWeiMainager() { try { Intent intent = new Intent(packageName); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity"); intent.setComponent(comp); mContext.startActivity(intent); } catch (Exception e) { Toast.makeText(mContext, "跳轉失敗", Toast.LENGTH_LONG).show(); e.printStackTrace(); goIntentSetting(); } }
若是失敗就直接打開預設界面:
private void goIntentSetting() { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", mContext.getPackageName(), null); intent.setData(uri); try { mContext.startActivity(intent); } catch (Exception e) { e.printStackTrace(); } }
從上面可以看出其主要的方法在與:
ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");
裡邊的參數前一個是華為許可權界面的包名,華為許可權界面的類名,既然知道包名與類名自然可以打開該Activity。
其他機型也是用這樣的思想去解決,那麼問題就出現了,看了網上這麼多適配的方案,都是這樣的思想啊,寫來寫去都差不多,那他們怎麼就知道這些機型的許可權界面的包名與類名呢?他們從來都沒說,或許是我沒看到,尷尬。
好了,所有的方法最終歸回到終極方案,下麵便是最終方法:
找到該機型,然後找打你想要的許可權界面,可能比較難找,不過你還是要找到它,然後打開,接著通過adb命令查看當前頁面的Activity,就可以看到該許可權界面的包名與類名。
具體方法看鏈接:
https://www.cnblogs.com/tangZH/p/10139371.html
當然,你想要適配什麼機型什麼android系統版本,就需要找到這樣一臺手機去執行這樣的操作,拿到許可權界面的包名與類名後就可以用上述類似的方法,在app裡邊直接打開許可權界面,沒辦法,好好適配吧,少年。