我的代码现在有问题,我不知道是否有人可以帮助我。 我需要在拨号盘中运行USSD代码,并且我使用此代码:
Intent i = new Intent(Intent.ACTION_DIAL);
i.setData(Uri.parse("tel:"+ Uri.encode("##873283#")));
startActivity(i);
这样打开拨号盘并没有做任何事情。 如果我手动插入,则USSD代码可以正确运行。
请注意此USSD代码,不使用呼叫按钮执行。
您可以在我手动运行代码的位置查看此视频:Video 1
从应用程序运行代码(它将收到命令'更新'并执行我发布的代码):Video 2
我认为代码只有在我们有按键时才会执行。它的问题是什么?有一种方法可以模拟出来吗?
非常感谢
答案 0 :(得分:0)
如果您想在没有用户交互的情况下直接发起呼叫,可以使用操作Intent.ACTION_CALL。由于最新SDK的安全性,您最初必须要求一些权限:
private void dialNumber(final String phoneNumber) {
//permission is automatically granted on sdk<23 upon installation
if (Build.VERSION.SDK_INT >= 23) {
//Check if you have permissions to execute a call (number or USSD)
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
Log.v("TAG","Permission is granted");
startActivity(new Intent(ACTION_CALL, Uri.fromParts("tel", phoneNumber, null)));
} else {
//Request permissions if we don't have them
Log.v("TAG","Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CALL_PHONE}, 1);
startActivity(new Intent(ACTION_CALL, Uri.fromParts("tel", phoneNumber, null)));
}
}
else {
Log.v("TAG","Permission is granted");
startActivity(new Intent(ACTION_CALL, Uri.fromParts("tel", phoneNumber, null)));
}
}
在AndroidManifest.xml中添加以下权限(在应用标记之前):
<uses-permission android:name="android.permission.CALL_PHONE" />
在您需要使用该方法时调用该方法并将电话号码作为字符串传递:
dialNumber("##323232#");
OR
dialNumber(123456789.toString());
我刚刚拍摄的视频 here