9
votes

L'intention de la livraison SMS Android Retourne toujours -1

Je suis confronté à un problème étrange sur Android. Je veux écouter une intention de livraison lorsque j'envoie un message texte via mon application. Voici ce que j'ai fait jusqu'à présent:

private void shootSMS(String number,long currentTime){
    SmsManager smsManager = SmsManager.getDefault();

    Intent sentIntent = new Intent(SentBroadcastReceiver.SENT_ACTION);
    Intent deliveredIntent = new Intent(DeliveredBroadcastReceiver.DELIVERED_ACTION);

    Bundle b = new Bundle();
    b.putString("num",number);
    b.putString("record_time",currentTime+"");

    sentIntent.putExtras(b);
    deliveredIntent.putExtras(b);


    PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this,(int)currentTime,sentIntent,PendingIntent.FLAG_ONE_SHOT);
    PendingIntent deliveredPendingIntent = PendingIntent.getBroadcast(this,(int)currentTime,deliveredIntent,PendingIntent.FLAG_ONE_SHOT);
    smsManager.sendTextMessage(number,null,getString(R.string.app_name),sentPendingIntent,deliveredPendingIntent);

}


3 commentaires

J'aimerais le savoir aussi. Je reçois toujours des résultats.ok Même si j'envoie à une ligne terrestre ou à un faux nombre. Quand cela retournera-t-il une erreur? Je n'ai pas vu un cas où il fait.


Avez-vous fini par comprendre ce qui se passait?


@ N0RM9N Non En fait, cela semblait être un problème de transporteur, et je n'ai pas pu trouver une solution pour!


3 Réponses :


0
votes

la documentation sur SendTextMessage états:

SENTINTENT: SI NON NULLE CE PLINCTIONNEMENT EST DIFFUSION lorsque le message est envoyé avec succès ou échoué. Le code de résultat sera ACTIVITÉ.RESULT_OK ...

Si vous allez regarder Activity.Result_ok la valeur est -1.

donc le code de résultat de -1 est en réalité résultat_ok.

En général, il est préférable de ne pas regarder les valeurs numériques mais essayer de déterminer quelle constante ils représentent.


3 commentaires

Je fais exactement la même chose dans mon code, je viens de dire qu'il retourne -1 pour rendre les choses plus brillantes, j'utilise déjà l'activité_Result_ok, je ne pense pas qu'il y aura une différence cependant! Merci d'avoir essayé d'aider mais ça n'a pas résoudre mon problème


Pensez à modifier votre question pour nous montrer le côté de la réception de votre code. Comme je l'ai dit ci-dessus, Activity.Result_ok est -1 Ainsi dit qu'il renvoie -1 dit que le résultat était résultat. Je pense que vous ne comprenez pas ce que le résultat signifie, mais sans le code de ce côté, il est impossible de le dire.


Ouais! C'est là que se pose le problème, je reçois le résultat_ok, même si le message texte n'est pas livré de spécial dans mon radiodifférieur juste un simple commutateur



0
votes

Faites comme ceci: xxx pré>

et votre récepteur:

NOTE QUI UTILISEZ "ACTIVITY.RESULT_OK" NUMÉRO DE NUMÉRO P>

 <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
 <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>  


1 commentaires

Je fais exactement la même chose dans mon code, je viens de dire qu'il est renvoyé -1 pour rendre les choses plus lumineuses, je n'ai pas besoin de diviser les messages ni d'utiliser des intents en attente car ma longueur de message est d'environ 5-6 caractères! D'autres applications telles que GOSMS et l'application de messagerie SMS par défaut, déterminez-la et donnent immédiatement un état défaillant! Merci mais cela n'a pas résolu mon problème



0
votes

Essayez cette approche: Pour envoyer un message texte, utilisez SendTextMessage à partir de SMS Manager.

import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
 Button btnSend;
 EditText etPhoneNo;
 EditText etMsg;

  @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  etPhoneNo = (EditText) findViewById(R.id.phno);
  etMsg = (EditText) findViewById(R.id.smstxt);
  btnSend = (Button) findViewById(R.id.send);

   btnSend.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    String phoneNo = etPhoneNo.getText().toString();
    String msg = etMsg.getText().toString();
    try {

      String SENT = "sent";
     String DELIVERED = "delivered";

      Intent sentIntent = new Intent(SENT);
     /*Create Pending Intents*/
     PendingIntent sentPI = PendingIntent.getBroadcast(
       getApplicationContext(), 0, sentIntent,
       PendingIntent.FLAG_UPDATE_CURRENT);

      Intent deliveryIntent = new Intent(DELIVERED);

      PendingIntent deliverPI = PendingIntent.getBroadcast(
       getApplicationContext(), 0, deliveryIntent,
       PendingIntent.FLAG_UPDATE_CURRENT);
     /* Register for SMS send action */
     registerReceiver(new BroadcastReceiver() {

       @Override
      public void onReceive(Context context, Intent intent) {
       String result = "";

        switch (getResultCode()) {

        case Activity.RESULT_OK:
        result = "Transmission successful";
        break;
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
        result = "Transmission failed";
        break;
       case SmsManager.RESULT_ERROR_RADIO_OFF:
        result = "Radio off";
        break;
       case SmsManager.RESULT_ERROR_NULL_PDU:
        result = "No PDU defined";
        break;
       case SmsManager.RESULT_ERROR_NO_SERVICE:
        result = "No service";
        break;
       }

        Toast.makeText(getApplicationContext(), result,
         Toast.LENGTH_LONG).show();
      }

      }, new IntentFilter(SENT));
     /* Register for Delivery event */
     registerReceiver(new BroadcastReceiver() {

       @Override
      public void onReceive(Context context, Intent intent) {
       Toast.makeText(getApplicationContext(), "Deliverd",
         Toast.LENGTH_LONG).show();
      }

      }, new IntentFilter(DELIVERED));

      /*Send SMS*/
     SmsManager smsManager = SmsManager.getDefault();
     smsManager.sendTextMessage(phoneNo, null, msg, sentPI,
       deliverPI);
    } catch (Exception ex) {
     Toast.makeText(getApplicationContext(),
       ex.getMessage().toString(), Toast.LENGTH_LONG)
       .show();
     ex.printStackTrace();
    }
   }
  });

  }

  @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }

}


2 commentaires

Correction subtile sur livré - Cela ne signifie pas que le destinataire l'a reçu. Cela signifie que le fournisseur de téléphone du destinataire l'a reçu. Il ne peut toujours pas être livré au téléphone de l'utilisateur (si le cas échéant était désactivé, à partir de la couverture ou que le réseau était occupé), et même si c'était cela ne signifie pas que l'utilisateur l'a vu.


Je le sais déjà! L'intention envoyée est tirée correctement, mais l'intention en attente de livraison est étrange, merci pour votre aide en passant