Android 6.0新特性以及動態獲取權限

其實早早就瞭解了6.0的新特性,只是沒用去仔細琢磨,直到今天學到如何用代碼去獲取動態權限,下面就和我一起去看看吧,,,

首先介紹下6.0的有關新特性

android 6.0新特性

6.0新特性:
1.指紋識別
2.動態獲取權限
3.FloatingActionButton
4.Tablayout
5.低電耗模式和應用待機模式

動態獲取權限
雖然是要用代碼獲取權限可是還是要添加權限的不然會崩的~~~

添加打電話的權限
 <uses-permission android:name="android.permission.CALL_PHONE"/>

然後activity_main代碼

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.permissiontest.MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="call"
        android:text="打110"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"/>

</android.support.constraint.ConstraintLayout>
使用ConstraintLayout拖拽一個button,添加點擊事件call方法

BaseActivity代碼

package com.example.permissiontest.base;

import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.pm.ActivityInfoCompat;
import android.widget.Toast;

/**
 * Created by 亮亮 on 2017/9/11.
 */

public abstract class BaseActivity extends Activity {
    private int permissionRequestCode=0;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initView();
        initData();
    }

    public abstract void initData() ;


    public abstract void initView() ;

    public void ifHasPermission(String Permission,int code){
       permissionRequestCode=code;
        int permissionStatus  = ContextCompat.checkSelfPermission(this, Permission);
        //判斷是否開啓了
        if(permissionStatus== PackageManager.PERMISSION_GRANTED){
            //打電話
            dosomething();
        }else{
            //如果沒有,就需要去申請
            /**
             * 參數1 activity
             * 參數2 權限 需要聲明權限寫成string數組
             * 參數3  請求碼
             */
            ActivityCompat.requestPermissions(this,new String[]{Permission},permissionStatus);
        }

    }
    //需要讓子類去實現的方法
    public  void dosomething(){

    }
    //當調用了  ActivityCompat.requestPermissions 這個回調方法就會被調用
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(permissionRequestCode==requestCode){
            //如果允許了
            if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
                dosomething();
            }else{
                Toast.makeText(this, "此功能需要打開您的打電話權限,請在設置頁面手動開啓", Toast.LENGTH_SHORT).show();
            }
        }
    }
}
做了一個抽取

MainActivity代碼

package com.example.permissiontest;

import android.Manifest;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.example.permissiontest.base.BaseActivity;

public class MainActivity extends BaseActivity {

    public void call(View v) {
        /**
         * 1.先檢查到底有沒有打電話權限
         * 2.如果沒有,那麼去申請打電話權限 ,如果有直接打電話
         * 3.寫一個申請權限的回調
         * 4.在申請失敗的回調中去提示用戶手動開啓權限,如果申請成功就直接打電話
         */
        //拿到當前打電話的權限的狀態
        //如果sdk 版本小於23的話 不需要做這個判斷和申請
        if (Build.VERSION.SDK_INT >= 23) {
            ifHasPermission(Manifest.permission.CALL_PHONE, Constants.CALLPHONE_REQUEST);
        } else {
            callPhone();
        }
    }


    @Override
    public void dosomething() {
        callPhone();
    }

    private void callPhone() {
        Toast.makeText(this, "我要打電話了~~~", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void initData() {

    }

    @Override
    public void initView() {
        setContentView(R.layout.activity_main);

    }


}

Constants 接口代碼

package com.example.permissiontest;

/**
 * Created by 亮亮 on 2017/9/11.
 */

public interface Constants{
    int CALLPHONE_REQUEST=100;
    int WRITESD_REQUEST=101;
}

………………..
下面看下效果圖:

這裏寫圖片描述
好的,就這樣,下會寫用框架動態獲取的。。。

發佈了42 篇原創文章 · 獲贊 28 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章