IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 8 app 使用QcRilHook 分析 -> 正文阅读

[移动开发]Android 8 app 使用QcRilHook 分析

Android 8 app 使用QcRilHook 分析

如果需要在app中使用 QcRilHook 获取 高通的NV值 你需要如下操作

  1. Android.mk
LOCAL_JAVA_LIBRARIES :=  qcrilhook

2 AndroidManifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.qualcomm.qti.phonefeature"
    android:sharedUserId="android.uid.phone" >

    <permission
        android:name="com.qualcomm.permission.USE_PHONE_SERVICE"
        android:protectionLevel="signatureOrSystem" />

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="com.qualcomm.permission.USE_QCRIL_MSG_TUNNEL"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />

    <application
        android:name=".AppGlobals"
        android:process="com.android.phone"
        android:supportsRtl="true" >

        <uses-library android:name="com.qualcomm.qcrilhook" />
        <service android:name=".FeatureService"
            android:singleUser="true"/>
        <activity
            android:name=".PrimarySubSetting"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:icon="@drawable/ic_settings_sim_display"
            android:label="@string/multi_sim_settings_title" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="com.qualcomm.qti.phonefeature.LTE_CONFIGURE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
  1. java class 使用

import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.qualcomm.qcrilhook.QcRilHook;
import com.qualcomm.qcrilhook.QcRilHookCallback;

public class AppGlobals extends Application {

    public static final String TAG = "phone_features";

    ServiceStateMonitor mServiceMonitor;
    CardStateMonitor mCardMonitor;

    Phone[] mPhones;

    QcRilHook mQcRilHook;
    private boolean mQcRilHookLoaded = false;
    private RegistrantList mProxyLoadedRegistrants = new RegistrantList();

    private QcRilHookCallback mQcRilHookCallback = new QcRilHookCallback() {
        @Override
        public void onQcRilHookReady() {
            mQcRilHookLoaded = true;
            synchronized (mProxyLoadedRegistrants) {
                mProxyLoadedRegistrants.notifyRegistrants();
            }
        }
        @Override
        public void onQcRilHookDisconnected() {
            mQcRilHookLoaded = false;
        }
    };
}
    @Override
    public void onCreate() {
        super.onCreate();
        if (UserHandle.myUserId() == 0) {
            mPhones = PhoneFactory.getPhones();
            mServiceMonitor = new ServiceStateMonitor();
            mCardMonitor = new CardStateMonitor(this);
            mQcRilHook = new QcRilHook(this, mQcRilHookCallback);
        }
    }

    public void registerQcRilHookLoaded(Handler handler, int what, Object obj) {
        Registrant r = new Registrant(handler, what, obj);
        synchronized (mProxyLoadedRegistrants) {
            mProxyLoadedRegistrants.add(r);
            if (mQcRilHookLoaded) {
                r.notifyRegistrant();
            }
        }
    }

    public void unregisterQcRilHookLoaded(Handler handler) {
        synchronized (mProxyLoadedRegistrants) {
            mProxyLoadedRegistrants.remove(handler);
        }
    }

    public boolean isQcRilHookLoaded() {
        return mQcRilHookLoaded;
    }
}
  1. 操作细节

	private void getModemInfoString(int type){
		int token;
		int requestId = mQcRILHook.QCRIL_EVT_HOOK_GET_MODEM_INFO_STRING;
		Message msg = Message.obtain(null, MSG_GET_MODEM_INFO_STRING_RESP, token, 0);
		OemHookCallback oemHookCb = new TomOemHookCallback(msg);		
		mQcRILHook.sendQcRilHookMsgAsync(requestId, request, oemHookCb, 0);
					
	}

//使用举例
 if(mQcRILHook.getBindQcrilMsgTunnelServiceState()){
						Log.d(LOG_TAG,"BindQcrilMsgTunnelService again ok");					
								getModemInfoString();
					}

总结

这里要说一下manifest里的一个属性
android:process=“com.android.phone”
具体如下:

如果需要将某些组件(如Service,Activity等)运行在单独的进程中,就需要用到android:process属性了。我们可以给android的组件设置android:process属性来使其运行在指定的进程中。
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:28:08  更:2021-09-14 13:30:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:52:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码