Android掛斷電話最新實現方法

1.Android 動態申請權限

首先,需要在AndroidManifest.xml靜態申請電話權限,否則無法動態申請權限,以下代碼位置不能放錯(在application之外):

<uses-permission android:name="android.permission.CALL_PHONE" />

然後,在java代碼中寫動態申請權限的邏輯(這是官網的寫法)

public void requestPower() {
//判斷是否已經賦予權限
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.上面電話權限字符)
            != PackageManager.PERMISSION_GRANTED) {
       //如果應用之前請求過此權限但用戶拒絕瞭請求,此方法將返回 true。
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.上面電話權限字符)) {//這裡可以寫個對話框之類的項向用戶解釋為什麼要申請權限,並在對話框的確認鍵後續再次申請權限.它在用戶選擇"不再詢問"的情況下返回false
        } else {
        //申請權限,字符串數組內是一個或多個要申請的權限,1是申請權限結果的返回參數,在onRequestPermissionsResult可以得知申請結果
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.上面電話字符,}, 1);
        }
    }
}

示例圖:

2.創建一個AIDL文件ITelephony包名必須是(com.android.internal.telephony)

// ITelephony.aidl
 
package com.android.internal.telephony;
 
// Declare any non-default types here with import statements
 
interface ITelephony {
 
boolean endCall();
 
void answerRingingCall();
 
}

示例圖:

3.寫java代碼實現掛斷電話

    private void endCall() {
        try {
            //通過反射得到隱藏的API,並獲得隱藏類的Class對象
            Class<?> clazz = Class.forName("android.os.ServiceManager");
            //獲取 Method類對象(方法對象)
            Method method = clazz.getMethod("getService", String.class);
            //調用方法獲到iBinder對象
            IBinder ibinder = (IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);
 
            ITelephony iTelephony = ITelephony.Stub.asInterface(ibinder);
            iTelephony.endCall();//結束電話
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

記得一定要動態添加電話權限哦!不然掛電話這個操作實現不瞭。

總結

到此這篇關於Android掛斷電話最新實現方法的文章就介紹到這瞭,更多相關Android掛斷電話最新內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: