2012-01-25 34 views
14

Trong ứng dụng của tôi, tôi không muốn sử dụng người gửi tin nhắn mặc định. Để làm điều đó, tôi theo liên kết sau In Android is it possible to send sms message to more than one recipient in code?Không thể gửi sms bằng SMSManager trong Android

  • Và mã đó cũng đã hoạt động. Nhưng các tin nhắn tôi gửi từ mã này không được lưu trên hộp thư đi và hộp thư đến của điện thoại.
  • Tôi đang sử dụng trình quản lý sms như thế này trong mã của mình

    SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage (phoneNumber, null, message, null, null);

Nhưng nó không phải là gửi sms.please giúp tôi với làm thế nào tôi có thể gửi sms trong android - tôi đã cố gắng sau quá PendingIntent sentPI = PendingIntent.getBroadcast (this, 0, Ý định mới ( GỬI) , 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
new Intent(DELIVERED), 0); 
SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

Nó cũng không hoạt động.
SMSAPPActivity.java

EDIT:

btnSendSMS.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String message = txtMessage.getText().toString(); 
       String[] PhnNoArray = new String[2]; 
       PhnNoArray[0] = "9999999999"; 
       PhnNoArray[1] = "8888888888"; 
       // StringTokenizer st = new StringTokenizer(phoneNo, ","); 
       smsManager = SmsManager.getDefault(); 
       for (int i = 0; i < PhnNoArray.length; i++) { 
        smsManager = SmsManager.getDefault(); 
         // this is the function that does all the magic 
//      sms.sendTextMessage(phoneNumber, null, msg, pi, null); 
        smsManager.sendTextMessage(PhnNoArray[i], null, message, null, 
          null); 
        Toast.makeText(getBaseContext(), "SMS sent : " + i, 
          Toast.LENGTH_SHORT).show(); 
       } 
} 
     }); 

Xin vui lòng xem các chỉnh sửa và cho tôi biết những gì tôi đã làm wrong.tost được hiển thị nhưng sms không nhận được trên điện thoại khác bằng cách sử dụng mã này

+0

những gì bạn có nghĩa là "người gửi thông điệp mặc định"? Vui lòng làm rõ – JoxTraex

+0

@JoxTraex: theo người gửi tin nhắn mặc định tôi có nghĩa là tôi không muốn mở ứng dụng nhắn tin của hệ thống để gửi tin nhắn tôi muốn gửi tin nhắn từ ứng dụng của mình ... – Shruti

+0

Tôi đang làm điều gì đó tương tự TẠI ĐÂY !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-sms-mms-in-android – toobsco42

Trả lời

20

Tôi đã sử dụng sau mã để gửi sms cho nhiều con số và gửi sms được lưu trong các tin nhắn

private void sendSMS(String phoneNumber, String message) { 
     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
       SENT), 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(DELIVERED), 0); 

     // ---when the SMS has been sent--- 
     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) { 
       case Activity.RESULT_OK: 
        ContentValues values = new ContentValues(); 
        for (int i = 0; i < MobNumber.size() - 1; i++) { 
         values.put("address", MobNumber.get(i).toString());// txtPhoneNo.getText().toString()); 
         values.put("body", MessageText.getText().toString()); 
        } 
        getContentResolver().insert(
          Uri.parse("content://sms/sent"), values); 
        Toast.makeText(getBaseContext(), "SMS sent", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(getBaseContext(), "Generic failure", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(getBaseContext(), "No service", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(getBaseContext(), "Null PDU", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(getBaseContext(), "Radio off", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       } 
      } 
     }, new IntentFilter(SENT)); 

     // ---when the SMS has been delivered--- 
     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS delivered", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(getBaseContext(), "SMS not delivered", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       } 
      } 
     }, new IntentFilter(DELIVERED)); 

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 
    } 

để gửi thông điệp tới nhiều số tôi được sử dụng trên chức năng như:

if (MobNumber != null) { 

       for (int i = 0; i < MobNumber.size(); i++) { 
        String message = MessageText.getText().toString(); 
        String tempMobileNumber = MobNumber.get(i).toString(); 
        sendSMS(tempMobileNumber, message); 
       } 
+4

Trong mã này, mỗi khi bạn gọi chức năng này 2 * NEW * BroadcastReceiver được đăng ký. Điều đó sẽ trở nên hơi điên rồ khi bạn bắt đầu gọi hàm này nhiều lần. – Billy

+0

bạn có thể gọi bên trong người nhận unregisterReceiver (điều này); để tránh nó –

+0

Bạn đang sống tiết kiệm ... nhưng khi chúng tôi gửi tin nhắn trên nhiều số, nó chỉ lưu trữ số đầu tiên của danh sách trong các mục được gửi chứ không phải tất cả các số? –

3

1) thêm thư trong thư đã gửi thay vì Hộp thư đi, vì Hộp thư đi chứa các thư được cho là gửi hoặc gửi trạng thái.

2) khi bạn gửi tin nhắn thêm chúng cùng một lúc trong "nội dung: // sms/gửi uri

gì đang dừng u để lưu trữ chúng trong cơ sở dữ liệu và những gì bạn đã cố gắng nhưng

...

sử dụng dưới mã để sendSMS

smsManager.sendTextMessage(number, null,desc, null, null); 

và bằng cách sử dụng nội dung: // sms/gửi URI, bạn có thể chèn các tin nhắn văn bản cùng vào tin nhắn dat abase

+0

: cảm ơn bạn đã trả lời .. xem chỉnh sửa của tôi tôi đã thêm mã quá cho thấy bánh mì nướng cho sms gửi – Shruti

+0

tôi đã chỉnh sửa trả lời xin vui lòng đi qua nó một lần. dòng trên "nội dung: // sms/sent" là một nội dung uri, trỏ đến bảng cơ sở dữ liệu của các tin nhắn đã gửi, chèn thông điệp của bạn vào URI này, vì vậy tin nhắn sẽ được gửi và chèn vào tin nhắn db. ... – AAnkit

+0

nhưng tôi phải gửi tin nhắn tới nhiều số – Shruti

1

chỉ cần gửi trực tiếp ... bằng cách sử dụng SmsManager. Chỉ có vấn đề là người dùng sẽ không biết về nó.

2

Hy vọng điều này có thể giúp bạn.

MainActivity.java

import android.os.Bundle; 
import android.app.Activity; 
import android.telephony.SmsManager; 
import android.view.Menu; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.*; 
import android.view.View.OnClickListener; 
import android.view.*; 


public class MainActivity extends Activity implements OnClickListener{ 


Button click; 
EditText txt; 
TextView txtvw; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

click = (Button)findViewById(R.id.button); 
txt = (EditText)findViewById(R.id.editText); 
txtvw = (TextView)findViewById(R.id.textView1); 

click.setOnClickListener(this); 
} 

@Override 
public void onClick(View v){ 


txt.setText(""); 
v = this.getCurrentFocus(); 

try{ 
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage("8017891398",null,"Sent from Android",null,null); 
} 
catch(Exception e){ 
    txtvw.setText("Message not sent!"); 
} 
if(v != null){ 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(v.getWindowToken(),0); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu.main, menu); 
return true; 
    } 

} 

thêm dòng này trong AndroidManifest.xml

<uses-permission android:name="android.permission.SEND_SMS" /> 

enter image description here

0

Trong trường hợp của tôi, đó là một thực tế là nội dung thư vượt quá 160 ký tự và tôi đã phải sử dụng sendMultipartTextMessage thay cho sendTextMessage.

2

Nếu bạn đang sử dụng thiết bị sim kép thì bạn phải đề cập đến số người gửi, Bạn không thể vượt qua null tại thời điểm đó. Nếu không, SmsManager sẽ gửi một lỗi gọi là SmsManager.RESULT_ERROR_GENERIC_FAILURE.

Mã để kiểm tra số lượng sims hoạt động:

public static int getNumberOfActiveSim(Context context) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { 
       SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 
       List<SubscriptionInfo> subscriptionInfo = subscriptionManager.getActiveSubscriptionInfoList(); 
       return subscriptionInfo != null ? subscriptionInfo.size() : 0; 
      } 
      TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
      if(telephonyManager != null && telephonyManager.getSimState() == TelephonyManager.SIM_STATE_ABSENT){ 
       return 1; 
      } 
      return 0; 
     }