以下是一个通过请求发送预定输入导航USSD菜单的示例代码:
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_PHONE_PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查电话权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
// 申请电话权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PHONE_PERMISSION);
} else {
// 已经有电话权限,发送USSD请求
sendUSSD("*123#");
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_PHONE_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予电话权限,发送USSD请求
sendUSSD("*123#");
} else {
// 用户拒绝电话权限,处理相应逻辑
}
}
}
private void sendUSSD(String ussdCode) {
TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
manager.sendUssdRequest(ussdCode, new TelephonyManager.UssdResponseCallback() {
@Override
public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) {
// 处理USSD响应
}
@Override
public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {
// 处理USSD响应失败
}
});
}
}
这个示例代码首先检查应用是否有电话权限。如果没有,它会请求用户授予电话权限。如果已经有电话权限,它会调用sendUSSD()
方法发送USSD请求。
在sendUSSD()
方法中,我们获取了TelephonyManager
实例,并调用sendUssdRequest()
方法发送USSD请求。我们传递USSD代码和一个UssdResponseCallback
对象作为参数来处理USSD响应。
在onReceiveUssdResponse()
方法中,我们可以处理接收到的USSD响应。在onReceiveUssdResponseFailed()
方法中,我们可以处理USSD响应失败的情况。
请确保在AndroidManifest.xml文件中添加了相应的权限: