首頁 > 軟體

Android結束通話電話最新實現方法

2022-02-18 19:00:25

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結束通話電話最新內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com