この記事では、主に Android の開発におけるテキスト メッセージを送信するための小さなプログラムの例を紹介します。この記事には、ブロードキャスト受信機を監視するテキスト メッセージを送信するサンプルのアップグレード バージョンも含まれています。
上の画像はコード構造図です。
それでは、具体的なコードを見てみましょう。
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 :
を呼び出します。ミニ プログラムと同様に、ここでは 2 つの AVD を開く必要があります機能テスト用。
テキストメッセージングアプリケーションのメインクラスはSmsManagerです。 Android 2.0 より前は、android.telephony.gsm.SmsManager を使用する必要があります
それ以降は、android.telephony.SmsManager を使用する必要があります。
<?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>
は、システムのデフォルト情報マネージャーを取得することを意味します
smsManager.sendTextMessage(destinationAddress 、scAddress、Text、SENTINTENT、DELIVERYINTENT)
- DestInationaddress: 対象の電話番号
-SCADDDRESS: サービスプロバイダーの SMS 番号センター番号 (チャイナモバイルの SMS センター番号など)、テストは記入できません。 :-テキスト: SMS コンテンツ-センテンテント: 送信-& gt; 中国移動-& gt; 送信または失敗を返すための信号の送信に失敗しました-& gt; : 送信-> 中国モバイル-& GT; 相手側がこの情報を受信したかどうか-> フォローアップ: この意図は SMS が受信されたかどうかのステータス情報です。相手(サプライヤーは正常に送信しましたが、相手は受信しませんでした)。
public
static
PendingIntent getBroadcast (Context context, int requestCode, Intent Intent, int flags)
Context.sendBroadcast()の呼び出しと同様に、ブロードキャストのPendingIntentを返します関数
インテントが使用されている ブロードキャストのインテント
フラグには、FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT
、FLAG_UPDATE_CURRENTが含まれます。これは、新しく作成されたPendingIntentを1回使用するように設定するために使用されます。ない場合は作成せず、現在の、
現在の情報など属性を更新します。
さらに、AndroidManifest.xmlでSMS送信許可を宣言する必要があります。
SmsManager smsManager = SmsManager.getDefault();
テキストメッセージ作成インターフェイスを表示:
SmsManager smsMgr = SmsManager.getDefault(); smsMgr.sendTextMessage(address, null, message, null, null);
メールを送信:
Uri smsToUri = Uri.parse("smsto://10086"); Intent mIntent = new Intent( android.content.Intent.ACTION_SENDTO, smsToUri ); startActivity( mIntent );
アップグレードバージョン:
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"));
registerReceiver() は、ブロードキャスト受信機を登録するために使用されます。このメソッドは Content で定義されます。
public abstract Intent registerReceiver(BroadcastReceiverReceiver,IntentFilter filter); システムがフィルターを満たすブロードキャストをクエリ
すると、それを受信機に教えて処理させます。通常、これは onReceive() メソッドで処理されます。
如果不是在代码中主动通过registerReceiver()进行注册,那么就要从AndroidManifest.xml进行配置,代码如下
<receiver android:name="类名"> <intent-filter> <action android:name="接收者中Intent参数的action属性" /> </intent-filter> </receiver>
这里需要注意,在配置文件中activity标签和receiver标签是平级的。
在模拟器中发送中文会接收方出现乱码的问题,但是在真机中,就不会出现乱码的情况了。所以开发者只需要正常开发短信功能,不需要编码转换。
以上がテキスト メッセージを送信するための Android の小さなプログラムのサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。