2016-02-01 1 views
-1

Comme nous le savons, lorsque nous utilisons un menu dans Sim Toolkit, il envoie la commande au réseau mobile au format ussd ou sms. J'ai besoin de ce sms ou de l'ussd pour l'enregistrer et le montrer à moi dans l'application androïde.application qui va enregistrer l'ussd ou sms

J'appelle le service de la bibliothèque que je suis entré dans l'activité principale comme celui-ci

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Intent srvIntent = new Intent(this, CDUSSDService.class); 
    startService(srvIntent); 


} 
} 

service USSD classe est comme ça:

public class CDUSSDService extends Service{ 

    private String TAG = CDUSSDService.class.getSimpleName(); 
    private boolean mActive = true;//false //we will only activate this "USSD listener" when we want it 


    BroadcastReceiver receiver = new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      if(intent.getAction().equals(Intent.ACTION_INSERT)) 
      { 
       //activity wishes to listen to USSD returns, so activate this 
       mActive = true; 
       Log.d(TAG, "activate ussd listener"); 

       showtoast(""+"activate ussd listener"); 
      } 
      else if(intent.getAction().equals(Intent.ACTION_DELETE)) 
      { 
       mActive = false; 
       Log.d(TAG, "deactivate ussd listener"); 
       showtoast(""+"DeActivate ussd listener"); 
      } 
     } 
    }; 

    private final IExtendedNetworkService.Stub mBinder = new IExtendedNetworkService.Stub() 
    { 
     public void clearMmiString() throws RemoteException 
     { 
      Log.d(TAG, "called clear"); 
      showtoast("called clear."); 
     } 

     public void setMmiString(String number) throws RemoteException 
     { 
      Log.d (TAG, "setMmiString:" + number); 
      showtoast("setMmiString:"+number); 
     } 

     public CharSequence getMmiRunningText() throws RemoteException 
     { 
      if(mActive == true) 
      { 
       return null; 
      } 

      return "USSD Running"; 
     } 

     public CharSequence getUserMessage(CharSequence text) 
       throws RemoteException { 
      Log.d(TAG, "get user message " + text); 
      showtoast("GET Usr Message:"+text); 

      if(mActive == false){ 
       //listener is still inactive, so return whatever we got 
       Log.d(TAG, "inactive " + text); 
       showtoast("inactive:"+text); 
       return text; 
      } 

      //listener is active, so broadcast data and suppress it from default behavior 

      //build data to send with intent for activity, format URI as per RFC 2396 
      Uri ussdDataUri = new Uri.Builder() 
      .scheme(getBaseContext().getString(R.string.uri_scheme)) 
      .authority(getBaseContext().getString(R.string.uri_authority)) 
      .path(getBaseContext().getString(R.string.uri_path)) 
      .appendQueryParameter(getBaseContext().getString(R.string.uri_param_name), text.toString()) 
      .build(); 

      sendBroadcast(new Intent(Intent.ACTION_GET_CONTENT, ussdDataUri)); 

      mActive = false; 
      return null; 
     } 
    }; 

    @Override 
    public IBinder onBind(Intent intent) { 
     Log.i(TAG, "called onbind"); 

     //the insert/delete intents will be fired by activity to activate/deactivate listener since service cannot be stopped 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(Intent.ACTION_INSERT); 
     filter.addAction(Intent.ACTION_DELETE); 
     filter.addDataScheme(getBaseContext().getString(R.string.uri_scheme)); 
     filter.addDataAuthority(getBaseContext().getString(R.string.uri_authority), null); 
     filter.addDataPath(getBaseContext().getString(R.string.uri_path), PatternMatcher.PATTERN_LITERAL); 
     registerReceiver(receiver, filter); 

     return mBinder; 
    } 


    public void showtoast(String str) 
    { 
     Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show(); 
    } 
    } 

J'ai créé MainActivity intérieur de la structure UssdLibray est comme ça dans l'image ci-dessous:

enter image description here

+0

J'ai commencé ce service et je ne reçois aucun message SHOWTOAST() quand j'envoie ou reçois un message, je veux montrer l'USSD/SMS en textview dans ma main activité s'il vous plaît je suis vraiment coincé dans ce –

Répondre

1

vous pouvez le faire avec l'aide de cette bibliothèque https://github.com/alaasalman/ussdinterceptor

+0

puis-je trouver et montrer la commande ussd/sms en utilisant cette bibliothèque? –

+0

oui vous pouvez l'implémenter –

+0

Cher le code de cette bibliothèque est correctement expliqué avec des commentaires chaque méthode, auditeurs etc sont correctement commentés il suffit de lire et d'obtenir des données de ces intentions et paramètres –