如何在Chaquopy中调用startActivity启动Activity及报错问题咨询
问题解决方法
修改后的可运行代码如下:
from java import jclass Intent = jclass('android.content.Intent') Uri = jclass('android.net.Uri') intent = Intent(Intent.ACTION_CALL) intent.setData(Uri.parse("tel:505")) # 若在Activity子类内部调用 self.startActivity(intent)
错误原因说明
- 第一行导入拼写错误:
form改为from,错误的导入会导致类加载异常,使后续参数类型识别错误 - 调用
startActivity的主体不是Activity实例:你代码中的activity变量大概率是AppCompatActivity类本身而非实例,如果你在对应Activity的Python实现逻辑中调用,直接用self即可,它就是当前Activity的实例 - 如果你是在非Activity类中调用该方法,需要从外部传入正确的Activity实例对象,用实例调用
startActivity才符合Android方法签名要求
注意事项
ACTION_CALL是需要敏感权限的功能:
- 需要在
AndroidManifest.xml中添加权限声明:<uses-permission android:name="android.permission.CALL_PHONE" /> - Android 6.0及以上系统需要先动态申请电话权限,再调用拨打电话逻辑,否则运行时会抛出权限异常
- 如果不需要直接拨出,仅跳转拨号界面,可将
Intent.ACTION_CALL替换为Intent.ACTION_DIAL,不需要申请权限即可使用
内容的提问来源于stack exchange,提问作者lamine ml
相关产品推荐
相关产品推荐

