Android6.0使用BaiDu地圖SDK動態獲取定位權限


1.報錯原因:

在集成百度地圖SDK的時候在手機上無法定位,檢查沒有任何錯誤,最后通過搜索才知道是Android版本為6.0的問題,這是因為在Android6.0采用了運行時權限(RuntimePermissions),Android6.0的權限一般分為兩種,一種時普通權限,可以直接獲取,其它的運行時權限,需要提示用戶手動同意之后,才能獲取。

失敗的原因就是,小米手機MIUI是Android6.0.1,如果不加動態獲取權限的代碼,是不會提示的,沒有得到權限,當然無法定位。

 

2.解決代碼:

private static final int BAIDU_READ_PHONE_STATE =100;

public void showContacts(){
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getApplicationContext(),"沒有權限,請手動開啟定位權限",Toast.LENGTH_SHORT).show();
            // 申請一個(或多個)權限,並提供用於回調返回的獲取碼(用戶定義)
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE}, BAIDU_READ_PHONE_STATE);
        }else{
            init();
        }
    }


    //Android6.0申請權限的回調方法
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            // requestCode即所聲明的權限獲取碼,在checkSelfPermission時傳入
            case BAIDU_READ_PHONE_STATE:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 獲取到權限,作相應處理(調用定位SDK應當確保相關權限均被授權,否則可能引起定位失敗)
                    init();
                } else {
                    // 沒有獲取到權限,做特殊處理
                    Toast.makeText(getApplicationContext(), "獲取位置權限失敗,請手動開啟", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                break;
        }
    }

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textureMapView = (TextureMapView) findViewById(R.id.mBaidumapView);
        //判斷是否為android6.0系統版本,如果是,需要動態添加權限
        if (Build.VERSION.SDK_INT>=23){
            showContacts();
        }else{
            init();//init為定位方法
        }
    }

 

 

注:本文節選自http://blog.csdn.net/shihao627/article/details/53908436,版權歸其所有。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM