在Xamarin Crossplatform应用中拨打USSD电话

时间:2018-06-25 19:31:31

标签: c# xamarin xamarin.android cross-platform ussd

我想使用C#在xamarin跨平台应用程序中进行USSD调用,但我不知道从哪里开始。我所看到的所有示例都是在Java中完成的。是否可以在我的应用程序中成功拨打USSD代码(例如* 270#)而无需打开拨号器?如果是,请如何?我将非常感谢您的帮助

2 个答案:

答案 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));