使用 pyjnius 在 kivy 中获取传入号码

问题描述

我正在尝试使用 pyjnius 获取 kivy 中的传入号码。

我的服务/main.py

from android.broadcast import broadcastReceiver
from jnius import autoclass,cast
import time


class CallReceiver:
    def build(self):
        context = autoclass('android.content.Context')
        intent = autoclass('android.content.Intent')

        self.br = broadcastReceiver(self.on_broadcast,actions=['headset_plug'])
        self.br.start()
        self.on_broadcast(context,intent)

    def on_broadcast(self,context,intent):
        #intent = autoclass('android.content.Intent')
        mContext = autoclass('android.content.Context')
        pythonActivity = autoclass('org.kivy.android.PythonService')
        TelephonyManager = autoclass('android.telephony.TelephonyManager')
        telephonyManager = cast('android.telephony.TelephonyManager',pythonActivity.mService.getSystemService(mContext.TELEPHONY_SERVICE))
        while True:
            simstate = telephonyManager.getCallState()
            if simstate == 1:
                String = autoclass('java.lang.String')
                phoneNumber = intent.getStringExtra(String('telephonyManager .EXTRA_INCOMING_NUMBER'))
                #print(phoneNumber)
                phoneNumber = intent.getStringExtra(String('telephonyManager .EXTRA_INCOMING_NUMBER'))

                print(phoneNumber)

                print(type(phoneNumber))
                print('CALLING!!!')
                #time.sleep(3)
            elif simstate == 0:
                print('NOT CALLING!!!')
                #time.sleep(3)


    def on_pause(self):
        self.br.stop()
        return True

    def on_resume(self):
        self.br.start()


    

if __name__ == '__main__':
    callreceiver = CallReceiver()
    callreceiver.build()

我收到来电状态,但总是“无”电话号码。 在日志中我看到这个:

I/python: None
    <class 'nonetype'>
    CALLING!!!

为什么广播接收器不使用动作“phone_state”,而是使用“headset_plug”?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)