我想使用C#在xamarin跨平台应用程序中进行USSD调用,但我不知道从哪里开始。我所看到的所有示例都是在Java中完成的。是否可以在我的应用程序中成功拨打USSD代码(例如* 270#)而无需打开拨号器?如果是,请如何?我将非常感谢您的帮助
答案 0 :(得分:1)
要使用Xamarin表单执行此操作,您必须为android创建一个自定义渲染器:
在共享项目中创建一个界面:
func3param
然后在您的android项目中:
使用系统; 使用Android.Content; 使用Android.OS; 使用ussd.Renderers;
[程序集:Xamarin.Forms.Dependency(typeof(IUssdRenderer))] 名称空间usd.Droid.Renderers { 公共类UssdRenderer:IUsdRenderer { 公开的Android.Net.Uri createUriFromString(字符串usd) {
describe('API test', () => {
it('should get token', () => {
var tok = "123";
cy.request({
method:'POST',
url:'http://.....',
headers: {
'accept' : 'application/json'
},
body: {
'username': 'user',
'password': 'pass'
},
}).as('resp').then((response) => {
tok = response.body.token;
cy.log(tok); // here is OK
});
cy.get('@resp').should((response) => {
expect(response.body).to.have.property('valueOf');
expect(response.body).to.have.property('toLocaleString');
expect(response.body).to.have.property('token');
//expect(response.body).to.contain('token')
expect(response.status).to.eq(200);
});
cy.log(tok); // here is initial value = 123
cy.request({
method:'GET',
url:'http://.....',
headers: {
'Authorization' : 'Bearer ' + tok,
},
});
});
});
您还必须注册您的界面,我使用的是棱镜:
public interface IUssdRenderer
{
void StartTransaction();
}
最后一点是确保您已启用“通话”权限:
右键单击Android项目>选项> Android应用程序
String uri = "tel:";
foreach (char c in ussd.ToCharArray())
{
if (c == '#')
{
uri += Android.Net.Uri.Encode("#");
}
else
{
uri += c;
}
}
return Android.Net.Uri.Parse(uri);
}
public void StartTransaction()
{
var intent = new Intent(Intent.ActionCall, createUriFromString("*270#"));
Context ctx = Xamarin.Forms.Forms.Context;
ctx.StartActivity(intent);
}
}
}
答案 1 :(得分:1)
您可以使用Xamarin.Essentials PhoneDialer进行呼叫,请注意,由于USSD包含“#”,因此您需要对其进行URL编码。例如:
string code = "*123#";
PhoneDialer.Open(HttpUtility.UrlEncode(code));