我想写一个小部件显示用户的预付余额,剩余数据等.
我正在考虑自动调用USSD代码,该代码会每隔一段时间(不经常为了节省电池)返回这些数据(必须为每个网络提供一个正则表达式).这必须在后台完成.我现在有一个应用程序运行ussd代码并返回结果,所以我认为这应该是可能的 - 但我不确定它将如何在后台完成.
我已经看到了调用一个数字的意图,但我不确定如何得到结果,我也在想这个意图会导致调用屏幕进入前台?
另一种选择是通过屏幕抓取来自运营商网站/ wap网站的结果来获取数据,但这会导致用户收取数据费用,因此我更倾向于使用USSD代码的解决方案.
在此先感谢任何帮助 - 今天才开始了解android,所以有很多东西需要学习:)
您可以使用以下代码在Android手机上调用ussd代码来检查余额等......
String s=calledittext.getText.toString();//calledittext is editText on the
//screen from which can get the number
if((s.startsWith("*"))&&(s.endsWith("#"))){
//if true then it is a USSD call----
callstring=s.substring(0, s.length()-1);
callstring=callstring+Uri.encode("#");
Log.d("CALL TYPE---------->", "USSD CALL");
}else{
callstring=s;
Log.d("CALL TYPE---------->", "Not a USSD CALL");
//Intent i=new Intent(android.content.Intent.ACTION_CALL,Uri.parse("tel:"+output.getText().toString()));
//startActivity(i);
}
Intent i=new Intent(android.content.Intent.ACTION_CALL,Uri.parse("tel:"+callstring));
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
我不完全确定,但我认为Android上尚不支持USSD,但您可以尝试这种解决方法:
startActivity(new Intent("android.intent.action.CALL",Uri.parse("tel:*123" + Uri.encode("#")));
Run Code Online (Sandbox Code Playgroud)
您可以通过以下代码发送USSD代码,还需要添加权限(这应该是Marshmallow更新后的运行时权限)
<uses-permission android:name="android.permission.CALL_PHONE" />
String code = "*" + Uri.encode("#") + 456 + Uri.encode("#");
startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + code)));
Run Code Online (Sandbox Code Playgroud)
你可以通过阅读USSD代码 AccessibilityService
这是一个例子:
服务:
public class USSDService extends AccessibilityService {
private static final String TAG = "USSDService";
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.d(TAG, "onAccessibilityEvent");
String text = event.getText().toString();
Log.d(TAG, text);
}
}
@Override
public void onInterrupt() {
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Log.d(TAG, "onServiceConnected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.flags = AccessibilityServiceInfo.DEFAULT;
info.packageNames = new String[]{"com.android.phone"};
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
setServiceInfo(info);
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml:
<service android:name=".services.USSDService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice"
android:resource="@xml/config_service" /> // created below
</service>
Run Code Online (Sandbox Code Playgroud)
res/xml/config_service.xml:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackSpoken"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_description"
android:notificationTimeout="100"
android:packageNames="com.cootf.sims"
android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" />
Run Code Online (Sandbox Code Playgroud)
运行代码 - >通过设置 - >辅助功能 - > [您的应用程序名称] - >启用启用辅助功能.任务完成!
| 归档时间: |
|
| 查看次数: |
29971 次 |
| 最近记录: |