이 글에서는 안드로이드 개발 과정에서 문자 메시지를 보내는 작은 프로그램의 예를 주로 소개합니다. 또한 방송 수신자를 모니터링하는 문자 메시지 보내기의 예도 함께 제공됩니다. 필요하신 분은 참고하시면 됩니다
위 그림은 코드 구조도 입니다.
이제 구체적인 코드를 살펴보겠습니다.
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>
최종 렌더링은
전화 통화 애플릿과 유사하게 기능 테스트를 위해 여기에서 두 개의 AVD를 열어야 합니다.
생각:
문자 메시지 애플리케이션의 주요 클래스는 SmsManager입니다. Android 2.0 이전에는 android.telephony.gsm.SmsManager
를 사용한 다음 android.telephony.SmsManager를 사용해야 합니다.
SmsManager smsManager = SmsManager.getDefault();
는 시스템을 얻는다는 의미입니다. 기본 정보 관리자
<<> SMSMANAGER.SENDTEXTEXTMESSAGE (DestinationAddress, SCADDDRESS, Text, SENTINTENT, DELIVERYINTENT) ddress: 서비스 제공업체의 SMS 센터 번호(예: China Mobile의 SMS 센터 번호), 필요하지 않습니다. 시험 중에 채워 넣으세요.
-- 텍스트: 短信内容
상태
~ --> 후속 처리: 이 의도는 상대방이 SMS를 수신했는지 여부에 대한 상태 정보를 패키지합니다. 공급자가 성공적으로 보냈으나 상대방이 이를 받지 못했습니다.)
public
static PendingIntent getBroadcast(Context context, int requestCode, Intentintent, int flags)
Context.sendBroadcast( ) 호출과 유사하게 브로드캐스트용 PendingIntent를 반환합니다.함수
requestCode는 당분간 사용되지 않습니다intent는 방송에 사용되는 의도입니다플래그에는 FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_
CURRENT
, FLAG_UP
이 포함됩니다. DATE_CURRENT는 새로 생성된 PendingIntent를 한 번만 사용하도록 설정하고, 없으면 생성하지 않고, 현재 업데이트현재속성을 취소하는 데 사용됩니다. 또한 AndroidManifest.xml에서 SMS 전송 권한을 선언해야 합니다.
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"));
업그레이드 버전:
이 코드는 다음에 브로드캐스트를 추가합니다. 그것은 수신기 모니터링입니다. 자세한 코드는 다음과 같습니다.
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은 AndroidManifest.xml과 이전 코드와 동일합니다.
쿼리
하면 수신기에 이를 학습시키고 처리하도록 합니다. 일반적으로 onReceive() 메소드에서 처리됩니다.如果不是在代码中主动通过registerReceiver()进行注册,那么就要从AndroidManifest.xml进行配置,代码如下
<receiver android:name="类名"> <intent-filter> <action android:name="接收者中Intent参数的action属性" /> </intent-filter> </receiver>
这里需要注意,在配置文件中activity标签和receiver标签是平级的。
在模拟器中发送中文会接收方出现乱码的问题,但是在真机中,就不会出现乱码的情况了。所以开发者只需要正常开发短信功能,不需要编码转换。
위 내용은 문자 메시지 전송을 위한 Android 소형 프로그램 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!