如何解决如何获得usdd测量字符串值?
我找到了这个API here来完成我的工作,但我并没有知道如何将其应用到我的应用程序中
我知道有描述,但是我如何才能将api应用于onclick方法以运行ussd并获取测量值到字符串值,然后根据测量值忽略我喜欢的任何东西。谁能帮我逐步申请? 我已经尝试过这样 在我声明的appcompatActivity中
private HashMap map=new HashMap<>();
private USSDApi ussdApi;
在oncreate方法中
USSDController.verifyAccesibilityAccess(this);
USSDController.verifyOverLay(this);
map.put("KEY_LOGIN",new HashSet<>(Arrays.asList("koyu","waiting","loading","tinish yitebku")));
map.put("KEY_ERROR",new HashSet<>(Arrays.asList("chigir tefetrwal","problem","error","chigir")));
ussdApi = USSDController.getInstance(this);
然后使用onclick方法
atidabira.setonClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
String suffix = Uri.encode("#");
String ussd = "*" + "804"+suffix;
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + ussd));
if (checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
String[] PERMISSIONS={Manifest.permission.CALL_PHONE};
ActivityCompat.requestPermissions((Activity) mContext,PERMISSIONS,REQUEST);
}
else {
startActivity(intent);
}
ussdApi.callUSSDInvoke(ussd,map,new USSDController.CallbackInvoke() {
@Override
public void responseInvoke(String message) {
Toast.makeText(mContext,""+message,Toast.LENGTH_SHORT).show();
}
@Override
public void over(String message) {
}
});
}
});
解决方法
您需要做的就是创建一个ussd Response Callback,它将监听响应并在Telephony.sendUssdRequest上使用它,该方法需要三个参数(例如* 101#,回调和Handler)的方法,如下所示:
if (ActivityCompat.checkSelfPermission(activity,Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}else{
TelephonyManager telephonyManager= (TelephonyManager)activity.getSystemService(Context.TELEPHONY_SERVICE);
Handler handler = new Handler();
TelephonyManager telephonyManagerBySlot=telephonyManager.createForSubscriptionId(slot);
TelephonyManager.UssdResponseCallback callback = new TelephonyManager.UssdResponseCallback() {
@Override
public void onReceiveUssdResponse(TelephonyManager telephonyManager,String request,CharSequence response) {
super.onReceiveUssdResponse(telephonyManager,request,response);
Log.e("ussd",response.toString());
Toast.makeText(activity,response.toString(),Toast.LENGTH_SHORT).show();
}
@Override
public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager,int failureCode) {
super.onReceiveUssdResponseFailed(telephonyManager,failureCode);
Toast.makeText(activity,"Rung USSD code",Toast.LENGTH_SHORT).show();
Log.e("ussd","failed with code " + Integer.toString(failureCode));
}
};
try {
Log.e("ussd","trying to send ussd request");
telephonyManagerBySlot.sendUssdRequest(ussdCode,callback,handler);
}catch (Exception e){
String msg= e.getMessage();
Log.e("DEBUG",e.toString());
e.printStackTrace();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。