eli*_*iot 1 java android android-intent telephonymanager kotlin
我在情况下,我需要确定的Android来电的电话号码,但使用时 TelephonyManager.EXTRA_INCOMING_NUMBER机器人工作室警告EXTRA_INCOMING_NUMBER已被弃用。我通过电话进行筛查应该使用的developers.android.com,它显示了应用CallScreeningService API代替. 但我不知道如何使用 CallScreeningService 来获取来电号码。任何人都可以帮助我吗?
小智 5
正如@Saurabh 所说,筛选呼叫的新方法是通过CallScreeningService. 但是,要使该服务在 Android Q 及更高版本上运行,用户需要将您的应用设置为默认来电显示和垃圾邮件应用(这是通过使用新RoleManager类完成的)
注册您的筛查服务:
<service android:name="com.example.ScreeningService"
android:permission="android.permission.BIND_SCREENING_SERVICE">
<intent-filter>
<action android:name="android.telecom.CallScreeningService"/>
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
创建您的服务类:
@RequiresApi(api = Build.VERSION_CODES.N)
class ScreeningService : CallScreeningService() {
override fun onScreenCall(details: Details) {
//code here
}
}
Run Code Online (Sandbox Code Playgroud)
在您的主要活动(或您认为合适的任何地方)中向用户请求筛选角色:
@RequiresApi(Build.VERSION_CODES.Q)
private fun requestScreeningRole(){
val roleManager = getSystemService(Context.ROLE_SERVICE) as RoleManager
val isHeld = roleManager.isRoleHeld(RoleManager.ROLE_CALL_SCREENING)
if(!isHeld){
//ask the user to set your app as the default screening app
val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_CALL_SCREENING)
startActivityForResult(intent, 123)
} else {
//you are already the default screening app!
}
}
Run Code Online (Sandbox Code Playgroud)
捕获用户的响应:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
123 -> {
if (resultCode == Activity.RESULT_OK) {
//The user set you as the default screening app!
} else {
//the user didn't set you as the default screening app...
}
}
else -> {}
}
}
Run Code Online (Sandbox Code Playgroud)
为使用硬编码请求代码而道歉 >.<
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |