我正在开发一个Android应用程序.我基本上想要阅读USSD对应用程序的回应.有没有API可以这样做?如何将这些消息提取到应用程序中?
我正在尝试实现一个应用程序来发送,接收和解析Android上的USSD代码.到目前为止,我使用http://commandus.com/blog/?p=58上的代码来获得此功能.为了使服务正常工作,需要重新启动手机.这在用户第一次安装应用程序时不会出现问题,但我在仿真器上测试时注意到的是,即使服务没什么新功能,手机也需要在每次更新时重新启动.我想知道的是以下内容:
作为参考,我已经包含了我用于服务的代码,因为界面部分与原始网站上发布的代码不同.
接口:
* This file is auto-generated. DO NOT MODIFY.
package com.android.internal.telephony;
/**
* Interface used to interact with extended MMI/USSD network service.
*/
public interface IExtendedNetworkService extends android.os.IInterface {
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements
com.android.internal.telephony.IExtendedNetworkService {
private static final java.lang.String DESCRIPTOR = "com.android.internal.telephony.IExtendedNetworkService";
/** Construct the stub at attach it to the interface. */
public Stub() {
this.attachInterface(this, DESCRIPTOR);
}
/**
* Cast an …Run Code Online (Sandbox Code Playgroud) 几天来,我一直在这里和其他论坛上阅读有关USSD对话的线索.(USSD表示运营商的通知,其中包含通话费用详情).
我已经看到很多解决方案显然适用于Android中较低的API级别,但经过大量的测试,认为它们不再工作或者至少我无法让它们工作.
首先,我想知道是否有任何方法可以检测是否已向用户显示ussd对话框.所以我试过这个: 阻止USSD对话并阅读USSD回复?
但我从日志中获得的所有东西都与我的应用程序有关,虽然我可以在Eclipse的LogCat中看到它们,但我的应用程序中没有捕获到MMI相关的日志!也许它的工作版本低于我的Android版本(4.2.2).
然后我决定使用"IExtendedNetworkService",就像它在以下链接中使用的那样:
https://github.com/alaasalman/ussdinterceptor
使用IExtendedNetworkService在Android中获取USSD响应
实施USSD功能.将服务绑定到PhoneUtils,而不是在每次更新时重新启动手机
但它对Android 4.2.2及更高版本也没用.
然后我找到了这个链接: 如何解除Android中的系统对话框?
它似乎很有希望,但即使经过大量的测试,我也无法使它工作.我想也许我做错了什么,或者也是为了降低API.
之后我尝试了许多其他的东西,比如模拟主键和后退键,甚至以编程方式触摸隐藏该通知,但由于它们都在我自己的活动下工作,所以没有一个工作.
有谁知道这些方法或其他方法是否适用于管理甚至检测Android 4.2.2及更高版本中的USSD消息?
我非常感谢任何帮助,提前谢谢.
我正在尝试开始使用USSD.我熟悉其他形式的短信.最终,我想将USSD用作实时支付平台的一部分.
谢谢.
我正在尝试开发一个静默地拒绝USSD响应的应用程序.我已经使用http://commandus.com/blog/?p=58中的代码进行了微小的更改.我已经IExtendedNetworkService.aidl在包中com.android.internal.telephony和包USSDDumbExtendedNetworkService内创建了它com.commandus.ussd.问题是,运行应用程序后没有任何反应(即使重新启动手机后).有人能指出我做错了什么吗?我应该写任何额外的代码来使其工作吗?
IExtendedNetworkService.aidl
package com.android.internal.telephony;
/**
* Interface used to interact with extended MMI/USSD network service.
*/
interface IExtendedNetworkService {
/**
* Set a MMI/USSD command to ExtendedNetworkService for further process.
* This should be called when a MMI command is placed from panel.
* @param number the dialed MMI/USSD number.
*/
void setMmiString(String number);
/**
* return the specific string which is used to prompt MMI/USSD is running
*/
CharSequence …Run Code Online (Sandbox Code Playgroud) 我能够捕获传入的ussd消息,但如何在双卡手机的情况下比较传入的ussd消息?如果我收到一条消息提示,我怎么知道传入的消息是针对哪个SIM卡?
我做了很多关于ussd的研究,但是我无法阅读USSD,我怎么能像这个应用程序一样阻止ussd对话.
https://play.google.com/store/apps/details?id=com.iba.ussdchecker&hl=en
我安装这个https://github.com/alaasalman/ussdinterceptor重新启动我的手机(S2 android 4.0.3),发送ussd代码但没有任何反应,有人告诉我,我必须阅读日志,但我怎么能这样做.
我尝试这些代码从日志中读取USSD
USSD.java
package com.example.ussd;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import android.util.Log;
public class USSD {
private static String startmsg = "displayMMIComplete"; // start msg to look
// for
private static String endmsg = "MMI code has finished running"; // stop msg
private static String trimmsg = "- using text from MMI message: '"; // a msg
// to
// remove
// from
// the …Run Code Online (Sandbox Code Playgroud) 我目前正在使用android api level 26(Nexus 6P)中提供的Telephony Manager(USSD响应).对于单步ussd会话,它正在工作.
例:
USSD请求:"A"(ussd会话启动)
USSD回复:"X"(ussd会话终止)
TelephonyManager = telephonyManager(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Handler handler = new Handler();
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());
}
@Override
public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {
super.onReceiveUssdResponseFailed(telephonyManager, request, failureCode);
Log.e("ussd","failed with code " + Integer.toString(failureCode));
}
};
try {
Log.e("ussd","trying to send ussd request");
telephonyManager.sendUssdRequest("*123#",
callback,
handler);
}catch (Exception e){
String msg= e.getMessage();
Log.e("DEBUG",e.toString());
e.printStackTrace();
} …Run Code Online (Sandbox Code Playgroud) 我需要发送一个包含双值的USSD代码,该代码表示要转移的余额账户金额.该值由整数组成,也可以是小数分隔符和2个以上的数字.我的代码如下:
double doubleValue = 0.70;
String phoneNumber = "51234567", pincode = "1234";
String ast = Uri.encode("*");
String baseUssd = ast + "234" + ast + "1" + ast + phoneNumber + ast + pincode + ast;
StringBuilder builder = new StringBuilder();
builder.append(baseUssd);
builder.append(doubleValue); //i.e: 1.35, 0.80
builder.append(Uri.encode("#"));
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + builder.toString()));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我的手机将doubleValue视为135,080等,忽略点分隔符.我希望最终的代码包含"dot",允许发送十进制值.有人解决了这个问题吗?
我编写了一个使用ussd代码的应用程序.我想发送一个ussd的请求,但我不知道如何获取数据并将其保存在String中.
示例代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String encodedHash = Uri.encode("#");
String ussd = "*141*1" + encodedHash;
startActivityForResult(new Intent("android.intent.action.CALL",
Uri.parse("tel:" + ussd)), 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(getApplicationContext(),
"USSD: " + requestCode + " " + resultCode + " ", 1).show(); …Run Code Online (Sandbox Code Playgroud)