2016-04-13 47 views
2

Intent aracılığıyla yerleşik sms uygulamasında mesaj göndermeye çalışıyorum. İyi çalışıyor. İşte benim kodIntent aracılığıyla çok sayıda kişiye mesaj gönderme

public class Main_Act extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button startBtn = (Button) findViewById(R.id.button); 
    startBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      if(sendSMS()) { 
       Intent intent = new Intent(Main_Act.this, Sample.class); 
       startActivity(intent); 
      } 
     } 
    }); 
} 

protected boolean sendSMS() { 
    ArrayList<String> nums = new ArrayList<String>(); 
    nums.add("111111111"); 
    nums.add("222222222"); 
    Log.i("Send SMS", ""); 
    Intent smsIntent = new Intent(Intent.ACTION_VIEW); 

    smsIntent.setData(Uri.parse("smsto:")); 
    smsIntent.setType("vnd.android-dir/mms-sms"); 
    smsIntent.putExtra("address" ,nums); 
    smsIntent.putExtra("sms_body" , "Test "); 

    try { 
     startActivity(smsIntent); 
     finish(); 
     return true; 
    } 
    catch (android.content.ActivityNotFoundException ex) { 
     Toast.makeText(Main_Act.this, 
       "SMS faild, please try again later.", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
} 
} 

olduğunu Ama sorun o sms uygulamasında düğmesini göndermek tıklamadan başka aktivite için gidilen alır olduğunu. Mesajlaşma uygulamasında sadece gönder düğmesini tıkladıktan sonra başka bir etkinliğe gitmelidir. Herkes bana bu sorunla yardımcı olabilir, şimdiden teşekkürler.

+0

sadece SendSMS (call onClick stilini Amacı kaldır) –

+0

evet ... hatta bunu denedim ama nerede yapmalıdır: yerine (bu etkinliğe eklenen) Aşağıdaki geri arama yöntemi uygulamak ileti uygulamasında gönder düğmesini tıklattıktan sonra diğer etkinliğe gitme – Dyo

+0

YeniActivity başlatması için başka bir yöntem oluştur ve sendMessage –

cevap

2

Kodunuzda küçük bir yanlış anlaşılmayı temizleyelim: Burada olduğu gibi kodun aynı bölümünde/çalıştırılmasında her iki amacı da başlatmaya çalışmamalısınız.

Bir startActivity doğrudan etkinliğe gitmeyecek ve daha sonra etkinlik yürütme bittiğinde kodda aynı yere dönmeyecektir. Bunun yerine, yürütme amacıyla eşzamansız olarak kuyrukları. Ardından kodunuz yürütme için başka bir amaçtan ibarettir. Geçerli kod bittikten sonra (bu durumda, onClick() yönteminin düğmesi bittiğinde) Android kuyruğu mgmt, sırayı almaya başlayabilir. Muhtemelen ilk niyet kısa bir süre sonra gerçekleştirilir ve ardından ikincisinin derhal yürütülmesiyle doğrudan taşınır.

Özet olarak, sendSMS'deki sıraya ilk olarak bir amaç eklediğiniz ve daha sonra, ayrılmadan önce onClick'teki kuyruğa 2. amacı eklemeniz gerektiğidir. Artık her iki amaç da yürütülür. Biz Android dönmek ve "exit_on_sent" ekstra bir zorlama beklediklerini belirten

Intent smsIntent = new Intent(Intent.ACTION_VIEW); 
smsIntent.setData(Uri.parse("smsto:")); 
smsIntent.setType("vnd.android-dir/mms-sms"); 
smsIntent.putExtra("address" ,nums); 
smsIntent.putExtra("sms_body" , "Test "); 
// To force the SMS app to return immediately after sent SMS 
smsIntent.putExtra("exit_on_sent", true); 
startActivityForResult(smsIntent, MY_SMS_REQUEST_RESPONSE_CODE); 

Not startActivityForResult() yöntemi:

Ne yapmak gerekiyor gibi bir şey SendSMS kodunu değiştirmek için hızlı dönüş.

MY_SMS_REQUEST_RESPONSE_CODE, geri dönme yönteminde geri dönen sonucu tanımak için seçtiğiniz herhangi bir rasgele koddur (şu anda başka sonuçların gelmesini beklemiyor olsanız bile, ileride sahip olabilirsiniz).

Sonraki yapılacak ikinci amaç oluşturma ve sıraya alın. Ben kodunu koymak

@Override 
protected void onActivityResult(
     int callbackIdentifier, int resultCode, Intent intent) { 
    // Is this the expected sendSMS callback ? 
    if (callbackIdentifier== MY_SMS_REQUEST_RESPONSE_CODE) { 
     if (resultCode == RESULT_OK) { 
      // Continue where you left off (e.g. execute intent 2) 
      Intent intent = new Intent(Main_Act.this, Sample.class); 
      startActivity(intent);    
     } else if (resultCode == RESULT_CANCELED) { 
      // Error handling/retrying etc 
     } 
    } 
    // Support inherited callback functions 
    super.onActivityResult(callbackIdentifier,resultCode,intent); 
} 
+0

yeni etkinlik çağrılmayacaktır çünkü iç ortam koşulu yürütülmeyecek çünkü RESULT_OK için herhangi bir değer ayarlamıyoruz & resultcode 0 – Dyo

+0

RESULT_OK ve RESULT_CANCELED kodları Etkinlik sınıfında tanımlanmış olduğundan, bu kod etkinliğinizde bulunuyorsa, önceden tanımlanmış olması gerekir. 0, SMS uygulaması doğrudan geri dönmezse ve bu nedenle geri dönmek için kullanıcının geri düğmesini kullanması gerektiğinde elde edeceğiniz sonuç kodu RESULT_CANCELED olmalıdır. Bu nedenle smsIntent.putExtra ("exit_on_sent", true); Yukarıdaki kodumda. Eğer hala uygun dönüş kodunu döndüremiyorsa, yukarıdaki kodumda eksik başka bir şey olabilir. Kodu şu anda çalıştırmadım. – Lmickos

+0

RESULT_CANCELED, aynı zamanda, niyetin yürütülmesi sırasında Android için herhangi bir sorun olduğunda (güvenlik hataları, SMS uygulamasının olmaması veya benzeri) iade edilen şeydir.Bu çözümü kullanmak için tezahürde sıra dışı izinlere ihtiyacınız olduğunu düşünmüyorum. – Lmickos