Есть ли возможность обработки данных, отображаемых в диалоге затрат на связь, полученных предоплаченным пользователем. Я хочу сохранить все уменьшение баланса в течение продолжительности вызова в моем sqlite db.
Есть ли возможность обработки данных, отображаемых в диалоге затрат на связь, полученных предоплаченным пользователем. Я хочу сохранить все уменьшение баланса в течение продолжительности вызова в моем sqlite db.
Как мы узнаем из уже известного сообщения в блоге
В начале, посмотрите на класс PhoneUtils в исходном коде Android. [...] В частности, глядя на строку 217, намерение с именем "com.android.ussd.IExtendedNetworkService" . Итак, что вам нужно выполнить свою собственную службу, которая отвечает на это Намерение. Сервис должен быть реализован в соответствии с IExtendedNetworkService.aidl, который является частью платформы Android.
с чего начать? лучше всего следовать этому еще более известному сообщению в блоге
Прежде всего, мы понимаем основы:
IExtendedNetworkService
."com.android.ussd.IExtendedNetworkService"
, поэтому в манифесте приложения будет установлен соответствующий фильтр соответствия.com.android.phone.PhoneUtils
свяжется с этой службой. (Если вы не знаете, что связывает услугу, обратитесь к здесь)Давайте войдем в него.
Во-первых, приемник, это легкая часть. Мы создаем файл BootReceiver.java с этим содержимым.
package com.android.ussdcodes;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d("USSDService", context.getString(R.string.service_started));
context.startService(new Intent(context,USSDDumbExtendedNetworkService.class));
}
}
Теперь это сервис. Я не пробовал это сам, но я прочитал код здесь, чтобы найти объяснения методов, которые я добавил в комментарии. Также я редактировал некоторые вещи.
Насколько я понимаю, вы получите фактический текст в getUserMessage, там вы разобраете текст и вернете то, что хотите быть во всплывающем окне. Если вы не хотите всплывать, верните нуль. Таким образом, также там, где вы должны делать какие-либо другие материалы с этим текстом.
public class USSDDumbExtendedNetworkService extends Service {
public static final String TAG = "ExtNetService";
public static CharSequence mRetVal = null;
public static boolean mActive = true;
private boolean change = false;
private String msgUssdRunning = null;
private final IExtendedNetworkService.Stub mBinder = new IExtendedNetworkService.Stub() {
//Set a MMI/USSD command to ExtendedNetworkService for further process. This should be called when a MMI command is placed from panel.
//we don't need it in this case
@Override
public void setMmiString(String number) throws RemoteException {
}
//return the specific string which is used to prompt MMI/USSD is running
@Override
public CharSequence getMmiRunningText() throws RemoteException {
return msgUssdRunning;
}
//Get specific message which should be displayed on pop-up dialog.
Parameters:
text original MMI/USSD message response from framework
Returns:
specific user message correspond to text. null stands for no pop-up dialog need to show.
@Override
public CharSequence getUserMessage(CharSequence text)
throws RemoteException {
return text;
}
//Clear pre-set MMI/USSD command. This should be called when user cancel a pre-dialed MMI command.
//we don't need it in this case
@Override
public void clearMmiString() throws RemoteException {
}
};
@Override
public IBinder onBind(Intent intent) {
msgUssdRunning = "Some text to show";
return mBinder;
}
public IBinder asBinder() {
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}}
И последняя часть, манифест. Вам необходимо зарегистрировать услугу, а трансляционный транслятор
<receiver android:name="com.android.ussdcodes.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
/intent-filter>
</receiver>
<service android:name=".USSDDumbExtendedNetworkService" >
<intent-filter android:icon="@drawable/ic_launcher">
<action android:name="com.android.ussd.IExtendedNetworkService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>