Heim > WeChat-Applet > Mini-Programmentwicklung > Beispielcode für ein kleines Android-Programm zum Senden von Textnachrichten

Beispielcode für ein kleines Android-Programm zum Senden von Textnachrichten

高洛峰
Freigeben: 2017-03-15 16:04:51
Original
8310 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich ein Beispiel für ein kleines Programm zum Senden von Textnachrichten in der Entwicklung von Android vorgestellt. Der Artikel enthält auch eine aktualisierte Version eines Beispiels zum Senden von Textnachrichten, das Rundfunkempfänger überwacht Wer es braucht, kann darauf verweisen

Beispielcode für ein kleines Android-Programm zum Senden von Textnachrichten

Das obige Bild ist das Codestrukturdiagramm.

Schauen wir uns nun den spezifischen Code an.

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(); 
 
         
      } 
    }); 
     
  } 
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Das endgültige Rendering ist:

Beispielcode für ein kleines Android-Programm zum Senden von Textnachrichten

Ähnlich wie beim Telefonanruf-Applet müssen hier zwei AVDs zum Funktionstest geöffnet werden.


Gedanken:

Die Hauptklasse der SMS-Anwendung ist SmsManager. Vor Android 2.0 sollten Sie android.telephony.gsm.SmsManager

und danach android.telephony.SmsManager;


SmsManager smsManager = SmsManager.getDefault();
Nach dem Login kopieren

verwenden bedeutet, den Standard-Nachrichtenmanager des Systems abzurufen


smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, DeliveryIntent)

     – DestinationAddress: Zieltelefonnummer
    – scAddress: Dienst Wenn Sie die SMS-Center-Nummer Ihres Anbieters angeben (z. B. die SMS-Center-Nummer von China Mobile), müssen Sie diese während des Tests nicht ausfüllen.
-Text: SMS-Inhalt
-Sentent: Senden-& gt; China Mobile sendet einen Fehler-& gt; Die Absicht umschließt die Informationen zum SMS-Versand

                                                                                                                                                                                                   . --> verpackt die Statusinformation darüber, ob die SMS bei der Gegenpartei angekommen ist (der Lieferant hat sie erfolgreich versendet, die Gegenpartei hat sie jedoch nicht erhalten).

öffentlich
statisch PendingIntent getBroadcast (Context context, int requestCode, Intent intent, int flags) Gibt ein PendingIntent für Broadcast zurück, ähnlich dem Aufruf von Context.sendBroadcast( )
FunktionAnfragecode wird vorerst nicht verwendet
Absicht ist die Absicht, die für die Übertragung verwendet wird
Flags umfassen: FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_
CURRENT, FLAG_UP DATE_CURRENT wird verwendet, um den neu erstellten PendingIntent so festzulegen, dass er einmal verwendet wird, nicht erstellen, wenn keiner vorhanden ist, den aktuellen abbrechen, aktualisierenaktuelle usw. Attribute.

Darüber hinaus müssen wir auch die SMS-Sendeberechtigung in AndroidManifest.xml deklarieren.

Manchmal, wenn unsere beiden AVDs das Senden von Textnachrichten simulieren, werden wir manchmal feststellen, dass das Programm kann nicht normal verwendet werden. Das System meldet uns, dass KEINE DNS-Server gefunden wurden und der DNS-Dienst nicht gefunden werden konnte. Diese Situation wird normalerweise dadurch verursacht, dass Ihr Computer nicht mit dem Netzwerk verbunden ist.

SMS senden:



SmsManager smsMgr = SmsManager.getDefault();  
smsMgr.sendTextMessage(address, null, message, null, null);
Nach dem Login kopieren

SMS-Schreiboberfläche anzeigen:


Uri smsToUri = Uri.parse("smsto://10086");  
Intent mIntent = new Intent( android.content.Intent.ACTION_SENDTO, smsToUri );  
startActivity( mIntent );
Nach dem Login kopieren

E-Mail senden:


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"));
Nach dem Login kopieren

Aktualisierte Version:
The The Code fügt einen Listener für den Rundfunkempfänger hinzu. Der detaillierte Code lautet wie folgt:


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(); 
 
         
      } 
    }); 
     
  } 
}
Nach dem Login kopieren
main.xml ist dasselbe wie AndroidManifest.xml und der vorherige Code.

registerReceiver() wird zum Registrieren von Rundfunkempfängern verwendet. Diese Methode ist im Inhalt definiert.

Public Abstract Intent registerReceiver(BroadcastReceiver Receiver,IntentFilter Filter); Im Allgemeinen wird es in seiner onReceive()-Methode behandelt.

如果不是在代码中主动通过registerReceiver()进行注册,那么就要从AndroidManifest.xml进行配置,代码如下


<receiver android:name="类名"> 
<intent-filter> 
<action android:name="接收者中Intent参数的action属性" /> 
</intent-filter> 
</receiver>
Nach dem Login kopieren

这里需要注意,在配置文件中activity标签和receiver标签是平级的。

在模拟器中发送中文会接收方出现乱码的问题,但是在真机中,就不会出现乱码的情况了。所以开发者只需要正常开发短信功能,不需要编码转换。

Das obige ist der detaillierte Inhalt vonBeispielcode für ein kleines Android-Programm zum Senden von Textnachrichten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage