Note that there are some explanatory texts on larger screens.

plurals
  1. POUSSD service not working
    primarykey
    data
    text
    <p>I'm trying to develop an application which silently dismiss the USSD responses. I've used the code from <a href="http://commandus.com/blog/?p=58">http://commandus.com/blog/?p=58</a> with minor changes. I've created the <code>IExtendedNetworkService.aidl</code> in the package <code>com.android.internal.telephony</code> and <code>USSDDumbExtendedNetworkService</code> inside the package <code>com.commandus.ussd</code>. The problem is, nothing happens after running the application (even after restarting the phone). Can someone point out what am I doing wrong? Should I write any additional code for making it work?</p> <p>IExtendedNetworkService.aidl</p> <pre><code>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 getMmiRunningText(); /** * Get specific message which should be displayed on pop-up dialog. * @param text original MMI/USSD message response from framework * @return specific user message correspond to text. null stands for no pop-up dialog need to show. */ CharSequence getUserMessage(CharSequence text); /** * Clear timeout message and pre-set MMI/USSD command * This should be called when user cancel a pre-dialed MMI command. */ void clearMmiString(); } </code></pre> <p>USSDDumbExtendedNetworkService</p> <pre><code> package com.commandus.ussd; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.IBinder; import android.os.PatternMatcher; import android.os.RemoteException; import android.util.Log; import com.android.internal.telephony.IExtendedNetworkService; /** * Service implements IExtendedNetworkService interface. * USSDDumbExtendedNetworkService Service must have name * "com.android.ussd.IExtendedNetworkService" of the intent declared in the * Android manifest file so com.android.phone.PhoneUtils class bind to this * service after system rebooted. Please note service is loaded after system * reboot! Your application must check is system rebooted. * * @see Util#syslogHasLine(String, String, String, boolean) */ public class USSDDumbExtendedNetworkService extends Service { public static final String TAG = "MobileServices"; public static final String LOG_STAMP = "*USSDTestExtendedNetworkService bind successfully*"; public static final String URI_SCHEME = "ussd"; public static final String URI_AUTHORITY = "g_el.net"; public static final String URI_PATH = "/"; public static final String URI_PAR = "return"; public static final String URI_PARON = "on"; public static final String URI_PAROFF = "off"; public static final String MAGIC_ON = ":ON;)"; public static final String MAGIC_OFF = ":OFF;("; public static final String MAGIC_RETVAL = ":RETVAL;("; private static boolean mActive = false; private static CharSequence mRetVal = null; private Context mContext = null; private String msgUssdRunning = "G Testing..."; final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_INSERT.equals(intent.getAction())) { mContext = context; if (mContext != null) { msgUssdRunning = "ussd blocker Running"; mActive = true; Log.d(TAG, "activate"); } } else if (Intent.ACTION_DELETE.equals(intent.getAction())) { mContext = null; mActive = false; Log.d(TAG, "deactivate"); } } }; private final IExtendedNetworkService.Stub mBinder = new IExtendedNetworkService.Stub() { @Override public void setMmiString(String number) throws RemoteException { Log.d(TAG, "setMmiString: " + number); } @Override public CharSequence getMmiRunningText() throws RemoteException { Log.d(TAG, "getMmiRunningText: " + msgUssdRunning); return msgUssdRunning; } @Override public CharSequence getUserMessage(CharSequence text) throws RemoteException { if (MAGIC_ON.contentEquals(text)) { mActive = true; Log.d(TAG, "control: ON"); return text; } else { if (MAGIC_OFF.contentEquals(text)) { mActive = false; Log.d(TAG, "control: OFF"); return text; } else { if (MAGIC_RETVAL.contentEquals(text)) { mActive = false; Log.d(TAG, "control: return"); return mRetVal; } } } if (!mActive) { Log.d(TAG, "getUserMessage deactivated: " + text); //return null;//Use this in order to cancel the output on the screen. return text; } String s = text.toString(); // store s to the ! Uri uri = new Uri.Builder().scheme(URI_SCHEME).authority(URI_AUTHORITY).path(URI_PATH).appendQueryParameter(URI_PAR,text.toString()).build(); sendBroadcast(new Intent(Intent.ACTION_GET_CONTENT, uri)); mActive = false; mRetVal = text; Log.d(TAG, "getUserMessage: " + text + "=" + s); return null; } @Override public void clearMmiString() throws RemoteException { Log.d(TAG, "clearMmiString"); } }; /** * Put stamp to the system log when PhoneUtils bind to the service after * Android has rebooted. Application must call * {@link Util#syslogHasLine(String, String, String, boolean)} to check is * phone rebooted or no. Without reboot phone application does not bind tom * this service! */ @Override public IBinder onBind(Intent intent) { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_INSERT); filter.addAction(Intent.ACTION_DELETE); filter.addDataScheme(URI_SCHEME); filter.addDataAuthority(URI_AUTHORITY, null); filter.addDataPath(URI_PATH, PatternMatcher.PATTERN_LITERAL); registerReceiver(mReceiver, filter); // Do not localize! Log.i(TAG, LOG_STAMP); return mBinder; } public IBinder asBinder() { Log.d(TAG, "asBinder"); return mBinder; } @Override public boolean onUnbind(Intent intent) { unregisterReceiver(mReceiver); return super.onUnbind(intent); } } </code></pre> <p>Manifest file</p> <pre><code>&lt;service android:name="com.commandus.ussd.USSDDumbExtendedNetworkService"&gt; &lt;intent-filter &gt; &lt;action android:name="com.android.ussd.IExtendedNetworkService" /&gt; &lt;category android:name="android.intent.category.DEFAULT" /&gt; &lt;/intent-filter&gt; &lt;/service&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload