문자 메시지 전송을 위한 Android 소형 프로그램 샘플 코드

高洛峰
풀어 주다: 2017-03-15 16:04:51
원래의
8305명이 탐색했습니다.

이 글에서는 안드로이드 개발 과정에서 문자 메시지를 보내는 작은 프로그램의 예를 주로 소개합니다. 또한 방송 수신자를 모니터링하는 문자 메시지 보내기의 예도 함께 제공됩니다. 필요하신 분은 참고하시면 됩니다

문자 메시지 전송을 위한 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.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>
로그인 후 복사

최종 렌더링은

문자 메시지 전송을 위한 Android 소형 프로그램 샘플 코드

전화 통화 애플릿과 유사하게 기능 테스트를 위해 여기에서 두 개의 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 센터 번호), 필요하지 않습니다. 시험 중에 채워 넣으세요.
            -- 텍스트: 短信内容

            -- sentIntent:发送-->中國移动--> 中國移动发送失败-->功或失败信号--> 后续处理   即,这个인텐트는 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 전송 권한을 선언해야 합니다.

때때로 두 개의 AVD가 문자 메시지 전송을 시뮬레이션할 때 프로그램이 때때로 정상적으로 사용할 수 없습니다. 시스템은 DNS 서버를 찾을 수 없다는 메시지를 표시하며 DNS 서비스를 찾을 수 없습니다. 이 상황은 일반적으로 컴퓨터가 네트워크에 연결되어 있지 않기 때문에 발생합니다.

문자 메시지 보내기:


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과 이전 코드와 동일합니다.

registerReceiver()는 방송 수신기를 등록하는 데 사용됩니다. 이 메서드는 콘텐츠에 정의되어 있습니다.

public abstract Intent RegisterReceiver(BroadcastReceiver Receiver,IntentFilter filter); 시스템이 필터를 만족하는 방송을 찾기 위해

쿼리

하면 수신기에 이를 학습시키고 처리하도록 합니다. 일반적으로 onReceive() 메소드에서 처리됩니다.

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


<receiver android:name="类名"> 
<intent-filter> 
<action android:name="接收者中Intent参数的action属性" /> 
</intent-filter> 
</receiver>
로그인 후 복사

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

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

위 내용은 문자 메시지 전송을 위한 Android 소형 프로그램 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿