Cet article présente principalement l'exemple d'un petit programme d'envoi de messages texte dans le développement de Android L'article contient également un exemple d'une version améliorée d'envoi de messages texte qui surveille les récepteurs de diffusion. qui en a besoin peut s'y référer
L'image ci-dessus est le diagramme de structure du code.
Regardons maintenant le code spécifique.
Send.java
package cn.com.sms.send; import java.util.ArrayList; import java.util.Iterator; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsManager; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Send extends Activity { private String message; private String number ; private EditText editText; private EditText editText2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText = (EditText) this.findViewById(R.id.number); editText2 = (EditText)this.findViewById(R.id.message); Button button = (Button)this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { number = editText.getText().toString(); message = editText2.getText().toString(); // 在LogCat中可以查看到number和message的相关信息 Log.i("number", number); Log.i("message", message); /*获取系统默认的信息管理器,一定要注意的是SmsManager是android.telephony.SmsManager;这和 *我们使用的版本有关,在 Android 2.0 以前 应该使用 android.telephony.gsm.SmsManager *Android 2.0 之后的版本应该用 android.telephony.SmsManager。 */ SmsManager smsManager = SmsManager.getDefault(); /*PendingIntent.getBroadcast返回一个用于广播的PendingIntent对象,类似于调用Content.sendBroadcast(); */ PendingIntent paIntent = PendingIntent.getBroadcast(Send.this, 0, new Intent("SMS_SENT"), 0); PendingIntent deliveryIntent = PendingIntent.getBroadcast(Send.this, 0, new Intent("SMS_DELIVERED"), 0); // smsManager.pideMessage有些时候短信如果超过了字数,我们就需要这个方法来帮我们拆分短信内容。 ArrayList<String> smses = smsManager.pideMessage(message); Iterator<String> iterator = smses.iterator(); while(iterator.hasNext()){ String temp = iterator.next(); //发送短信 smsManager.sendTextMessage(number, null, temp, paIntent, deliveryIntent); } // 弹出一个浮动框显示提示内容,Toast.LENGTH_LONG代表浮动框显示时间的长短 Toast.makeText(Send.this, "短信发送完成", Toast.LENGTH_LONG).show(); } }); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="欢迎使用短信发送器,请输入电话号码" /> <EditText android:id="@+id/number" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="这里输入电话号码" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="欢迎使用短信发送器,请输入短信内容" /> <EditText android:id="@+id/message" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minLines="3" android:hint="这里输入短信内容" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="send" /> </LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.com.sms.send" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Send" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Le rendu final est :
Semblable à l'applet d'appel téléphonique, deux AVD doivent être ouverts ici pour les tests fonctionnels.
Réflexion :
La classe principale d'application de messagerie texte est SmsManager. Avant Android 2.0, vous devez utiliser android.telephony.gsm.SmsManager
puis vous devez utiliser android.telephony.SmsManager;
SmsManager smsManager = SmsManager.getDefault();
signifie pour obtenir le gestionnaire de messages par défaut du système
smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
— destinationAddress : numéro de téléphone de destination
— scAddress : fournisseur de services Numéro du centre SMS (tel que le numéro du centre SMS de China Mobile), vous n'avez pas besoin de le renseigner pendant le test.
-Texte : Contenu SMS
-Sentintent : Envoyer-& gt; China Mobile-& gt; China Mobile envoie un échec-& gt; L'intention enveloppe les informations d'envoi de SMS statut
--> regroupe les informations d'état indiquant si le SMS a été reçu par l'autre partie (le fournisseur l'a envoyé avec succès, mais l'autre partie ne l'a pas reçu).
public static PendingIntent getBroadcast (contexte contextuel, int requestCode, Intent intent, int flags)
Renvoie un PendingIntent pour la diffusion, similaire à l'appel de Context.sendBroadcast( )Fonction
requestCode n'est pas utilisé pour le moment
intent est l'intention utilisée pour la diffusion
les drapeaux incluent : FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UP DATE_CURRENT est utilisé pour définir le PendingIntent nouvellement créé à utiliser une fois, ne pas créer s'il n'y en a pas, annuler le courant, mettre à jourcourant, etc. attributs.
De plus, nous devons également déclarer l'autorisation d'envoi de SMS dans AndroidManifest.xml.
Parfois, lorsque nos deux AVD simulent l'envoi de messages texte, nous constatons que parfois le programme ne peut pas être utilisé normalement. Le système nous demandera AUCUN serveur DNS trouvé et le service DNS est introuvable. Cette situation est généralement due au fait que votre ordinateur n'est pas connecté au réseau.
Envoyer un message texte :
SmsManager smsMgr = SmsManager.getDefault(); smsMgr.sendTextMessage(address, null, message, null, null);
Afficher l'interface d'écriture de message texte :
Uri smsToUri = Uri.parse("smsto://10086"); Intent mIntent = new Intent( android.content.Intent.ACTION_SENDTO, smsToUri ); startActivity( mIntent );
Envoyer un e-mail :
Intent i = new Intent(Intent.ACTION_SEND); i.putExtra(Intent.EXTRA_EMAIL, address); i.putExtra(Intent.EXTRA_SUBJECT, filename); i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + filename)); ; i.setType("text/csv"); startActivity(Intent.createChooser(i, "EMail File"));
Version améliorée :
Le Le code ajoute un écouteur pour le récepteur de diffusion. Le code détaillé est le suivant
package cn.com.sms.send; import java.util.ArrayList; import java.util.Iterator; 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.os.Bundle; import android.telephony.SmsManager; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Send extends Activity { private String message; private String number ; private EditText editText; private EditText editText2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText = (EditText) this.findViewById(R.id.number); editText2 = (EditText)this.findViewById(R.id.message); Button button = (Button)this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { number = editText.getText().toString(); message = editText2.getText().toString(); // 在LogCat中可以查看到number和message的相关信息 Log.i("number", number); Log.i("message", message); /*获取系统默认的信息管理器,一定要注意的是SmsManager是android.telephony.SmsManager;这和 *我们使用的版本有关,在 Android 2.0 以前 应该使用 android.telephony.gsm.SmsManager *Android 2.0 之后的版本应该用 android.telephony.SmsManager。 */ SmsManager smsManager = SmsManager.getDefault(); /*PendingIntent.getBroadcast返回一个用于广播的PendingIntent对象,类似于调用Content.sendBroadcast(); */ PendingIntent paIntent = PendingIntent.getBroadcast(Send.this, 0, new Intent("SMS_SENT2"), 0); PendingIntent deliveryIntent = PendingIntent.getBroadcast(Send.this, 0, new Intent("SMS_DELIVERED2"), 0); // 注册一个BroadcastReceiver,当有匹配它的IntentFilter的Intent出现时,该方法会被触发 registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { int resultCode = getResultCode(); switch(resultCode){ case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "信息发送成功了哦、", Toast.LENGTH_LONG).show(); break; default: Toast.makeText(getBaseContext(), "信息发送失败了哦、", Toast.LENGTH_LONG).show(); } } }, new IntentFilter("SMS_SENT2")); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(getBaseContext(), "deliveryIntent", Toast.LENGTH_LONG).show(); Log.i("短信接收人是否查看信息", "看了"); } }, new IntentFilter("SMS_DELIVERED2")); // smsManager.pideMessage有些时候短信如果超过了字数,我们就需要这个方法来帮我们拆分短信内容。 ArrayList<String> smses = smsManager.pideMessage(message); Iterator<String> iterator = smses.iterator(); while(iterator.hasNext()){ String temp = iterator.next(); //发送短信 smsManager.sendTextMessage(number, null, temp, paIntent, deliveryIntent); } // 弹出一个浮动框显示提示内容,Toast.LENGTH_LONG代表浮动框显示时间的长短 Toast.makeText(Send.this, "短信发送完成", Toast.LENGTH_LONG).show(); } }); } }
main.xml est le même qu'AndroidManifest.xml et le code précédent.
registerReceiver() est utilisé pour enregistrer les récepteurs de diffusion. Cette méthode est définie dans Contenu.
public abstract Intent registerReceiver(BroadcastReceiver Receiver,IntentFilter filter); Si le système interroge pour trouver une diffusion qui satisfait au filtre, il l'apprendra au récepteur et le laissera la gérer. Généralement, il est géré dans sa méthode onReceive().
如果不是在代码中主动通过registerReceiver()进行注册,那么就要从AndroidManifest.xml进行配置,代码如下
<receiver android:name="类名"> <intent-filter> <action android:name="接收者中Intent参数的action属性" /> </intent-filter> </receiver>
这里需要注意,在配置文件中activity标签和receiver标签是平级的。
在模拟器中发送中文会接收方出现乱码的问题,但是在真机中,就不会出现乱码的情况了。所以开发者只需要正常开发短信功能,不需要编码转换。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!