ฉันต้องการส่ง SMS ด้วย Android
ความตั้งใจในการส่ง SMS คืออะไร?
ฉันต้องการแสดงมุมมองการเขียน sms พร้อมข้อความที่กำหนดไว้ล่วงหน้าของฉันในฟิลด์ข้อความ
ฉันต้องการส่ง SMS ด้วย Android
ความตั้งใจในการส่ง SMS คืออะไร?
ฉันต้องการแสดงมุมมองการเขียน sms พร้อมข้อความที่กำหนดไว้ล่วงหน้าของฉันในฟิลด์ข้อความ
คำตอบ:
คุณสามารถใช้รหัสต่อไปนี้:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("sms:"
+ phoneNumber)));
ตรวจสอบให้แน่ใจว่าคุณได้ตั้งphoneNumber
หมายเลขโทรศัพท์ที่คุณต้องการส่งข้อความถึง
คุณสามารถเพิ่มข้อความใน SMS ด้วย (จากความคิดเห็น):
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber));
intent.putExtra("sms_body", message);
startActivity(intent);
สิ่งนี้ใช้ได้สำหรับฉัน
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
btnSendSMS.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
sendSMS("5556", "Hi You got a message!");
/*here i can send message to emulator 5556. In Real device
*you can change number*/
}
});
}
//Sends an SMS message to another device
private void sendSMS(String phoneNumber, String message) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
}
คุณสามารถเพิ่มบรรทัดนี้ใน AndroidManifest.xml
<uses-permission android:name="android.permission.SEND_SMS"/>
ลองดูที่นี่
สิ่งนี้อาจเป็นประโยชน์สำหรับคุณ
ลองรหัสด้านล่างแล้วโทรsendSMS("99999999999", "message");
เพื่อส่ง SMS ในหมายเลขที่ต้องการ
//---sends an SMS message to another device---
@SuppressWarnings("deprecation")
private void sendSMS(String phoneNumber, String message)
{
Log.v("phoneNumber",phoneNumber);
Log.v("MEssage",message);
PendingIntent pi = PendingIntent.getActivity(this, 0,
new Intent(this, **DummyClasshere.class**), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, pi, null);
}
โปรดวางการอนุญาตต่อไปนี้ในAndroidManifest.xml
ไฟล์
<uses-permission android:name="android.permission.SEND_SMS"/>
หวังว่ามันจะช่วยได้
อัปเดต จากความคิดเห็น: DummyClasshere.class เป็นกิจกรรมโดยไม่ต้องทำกระบวนการใด ๆ หรือคลาสที่คุณต้องการนำทาง
คุณสามารถใช้ Object.class แทน DummyClasshere.class
new Intent()
และก็ทำเช่นนั้น
สิ่งนี้จะใช้ได้แน่นอนในการส่งข้อความโดยไม่ใช้ความตั้งใจ
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("Phone Number", null, "Message", null, null);
รหัสนี้จะใช้สำหรับการส่งข้อความในพื้นหลัง (ไม่แสดงข้อความนักแต่งเพลง)นอกจากนี้ยังสามารถทำงานภายในตัวรับสัญญาณออกอากาศ หากคุณต้องการส่งข้อความจากตัวรับสัญญาณออกอากาศ
<uses-permission android:name="android.permission.SEND_SMS"/>
ใน Android เรามีSmsManagerระดับที่จัดการการดำเนินงาน SMS เช่นการส่งข้อมูลข้อความและข้อความ SMS pdu รับวัตถุนี้โดยการเรียกวิธีการคงที่ SmsManager.getDefault ()
ตรวจสอบลิงค์ต่อไปนี้เพื่อรับรหัสตัวอย่างสำหรับการส่ง SMS:
หวังว่ารหัสนี้จะช่วยคุณออก :)
public class MainActivity extends Activity {
private int mMessageSentParts;
private int mMessageSentTotalParts;
private int mMessageSentCount;
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String phoneNumber = "0000000000";
String message = "Hello World!";
sendSMS(phoneNumber,message);
}
});
}
public void sendSMS(String phoneNumber,String message) {
SmsManager smsManager = SmsManager.getDefault();
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(message);
int messageCount = parts.size();
Log.i("Message Count", "Message Count: " + messageCount);
ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
for (int j = 0; j < messageCount; j++) {
sentIntents.add(sentPI);
deliveryIntents.add(deliveredPI);
}
// ---when the SMS has been sent---
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
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.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
/* sms.sendMultipartTextMessage(phoneNumber, null, parts, sentIntents, deliveryIntents); */
}
}
ฉันเพิ่มวิธี SMS ของฉันถ้ามันสามารถช่วยใครบางคน ระวังด้วย smsManager.sendTextMessage หากข้อความยาวเกินไปข้อความจะไม่หายไป คุณต้องเคารพความยาวสูงสุดขึ้นอยู่กับการเข้ารหัส ข้อมูลเพิ่มเติมที่นี่ผู้จัดการ SMS ส่งข้อความ mutlipart เมื่อมีน้อยกว่า 160 ตัวอักษร
// ใช้ทุกที่
SMSUtils.sendSMS(context, phoneNumber, message);
// Manifest
<!-- SMS -->
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<receiver
android:name=".SMSUtils"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="SMS_SENT"/>
<action android:name="SMS_DELIVERED"/>
</intent-filter>
</receiver>
// JAVA
public class SMSUtils extends BroadcastReceiver {
public static final String SENT_SMS_ACTION_NAME = "SMS_SENT";
public static final String DELIVERED_SMS_ACTION_NAME = "SMS_DELIVERED";
@Override
public void onReceive(Context context, Intent intent) {
//Detect l'envoie de sms
if (intent.getAction().equals(SENT_SMS_ACTION_NAME)) {
switch (getResultCode()) {
case Activity.RESULT_OK: // Sms sent
Toast.makeText(context, context.getString(R.string.sms_send), Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE: // generic failure
Toast.makeText(context, context.getString(R.string.sms_not_send), Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE: // No service
Toast.makeText(context, context.getString(R.string.sms_not_send_no_service), Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU: // null pdu
Toast.makeText(context, context.getString(R.string.sms_not_send), Toast.LENGTH_LONG).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF: //Radio off
Toast.makeText(context, context.getString(R.string.sms_not_send_no_radio), Toast.LENGTH_LONG).show();
break;
}
}
//detect la reception d'un sms
else if (intent.getAction().equals(DELIVERED_SMS_ACTION_NAME)) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(context, context.getString(R.string.sms_receive), Toast.LENGTH_LONG).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(context, context.getString(R.string.sms_not_receive), Toast.LENGTH_LONG).show();
break;
}
}
}
/**
* Test if device can send SMS
* @param context
* @return
*/
public static boolean canSendSMS(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
}
public static void sendSMS(final Context context, String phoneNumber, String message) {
if (!canSendSMS(context)) {
Toast.makeText(context, context.getString(R.string.cannot_send_sms), Toast.LENGTH_LONG).show();
return;
}
PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent(SENT_SMS_ACTION_NAME), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent(DELIVERED_SMS_ACTION_NAME), 0);
final SMSUtils smsUtils = new SMSUtils();
//register for sending and delivery
context.registerReceiver(smsUtils, new IntentFilter(SMSUtils.SENT_SMS_ACTION_NAME));
context.registerReceiver(smsUtils, new IntentFilter(DELIVERED_SMS_ACTION_NAME));
SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(message);
ArrayList<PendingIntent> sendList = new ArrayList<>();
sendList.add(sentPI);
ArrayList<PendingIntent> deliverList = new ArrayList<>();
deliverList.add(deliveredPI);
sms.sendMultipartTextMessage(phoneNumber, null, parts, sendList, deliverList);
//we unsubscribed in 10 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
context.unregisterReceiver(smsUtils);
}
}, 10000);
}
}
String phoneNumber = "0123456789";
String message = "Hello World!";
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);
รวมสิทธิ์ต่อไปนี้ในไฟล์ AndroidManifest.xml ของคุณ
<uses-permission android:name="android.permission.SEND_SMS" />
สิ่งที่อธิบายไว้ข้างต้นมีไว้สำหรับการวาง SMS ในสถานะ 'พร้อมที่จะเปิดตัว' เท่านั้น ดังที่ Senthil Mg กล่าวว่าคุณสามารถใช้ตัวจัดการ sms เพื่อส่ง SMS ได้โดยตรง แต่SMSManager
ถูกย้ายไปที่android.telephony.SmsManager
ฉันรู้ว่ามันไม่ได้เป็นข้อมูลเพิ่มเติมอีกมากมาย แต่มันอาจช่วยใครซักคนในบางวัน
หวังว่านี่จะช่วยคุณได้ ...
ชื่อไฟล์ = 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;
}
}
เพิ่มบรรทัดนี้ใน AndroidManifest.xml
<uses-permission android:name="android.permission.SEND_SMS" />
อนุญาตให้ส่งข้อความผ่านแอพที่มีอยู่ phoneNumber - คือ String หากคุณไม่ต้องการระบุหมายเลขโทรศัพท์ให้ใช้สตริงว่าง ""
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", phoneNumber, null));
sendIntent.putExtra("sms_body", "text message");
startActivity(sendIntent);
ส่ง SMS จาก KitKat ขึ้นไป: - เพิ่มสิทธิ์นี้ในAndroidManifest.xmlของคุณ
<uses-permission android:name="android.permission.SEND_SMS"/>
คุณควรจะต้องใช้การอนุญาตแบบรันไทม์สำหรับ Marshmallowและ Above Version
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.defaultmessanginggit">
<uses-permission android:name="android.permission.SEND_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ConversationListActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ComposeSMSActivity"
android:label="@string/title_activity_compose_sms" >
</activity>
</application>
</manifest>
รหัสซึ่งจะได้รับด้านล่าง: -
activity_conversation_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<Button
android:id="@+id/btn_send_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Message" />
</LinearLayout>
ConversationListActivity.java
public class ConversationListActivity extends FragmentActivity {
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
* device.
*/
private int PERMISSIONS_REQUEST_RECEIVE_SMS = 130;
private Button btn_send_sms;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversation_list);
btn_send_sms = (Button) findViewById(R.id.btn_send_msg);
btn_send_sms.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int hasSendSMSPermission = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
hasSendSMSPermission = checkSelfPermission(Manifest.permission.SEND_SMS);
if (hasSendSMSPermission != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.SEND_SMS},
PERMISSIONS_REQUEST_RECEIVE_SMS);
} else if (hasSendSMSPermission == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(ConversationListActivity.this, ComposeSMSActivity.class);
startActivity(intent);
}
}else{
Intent intent = new Intent(ConversationListActivity.this, ComposeSMSActivity.class);
startActivity(intent);
}
}
});
}
}
นี่คือรหัสสำหรับรูปแบบ SMS และสำหรับการส่ง SMS: -
activity_compose_sms.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MergeRootFrame" />
</LinearLayout>
fragment_compose_sms.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/compose_to"
android:id="@+id/textView"
android:layout_gravity="center_vertical" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="phone"
android:ems="10"
android:id="@+id/composeEditTextTo" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/compose_message"
android:id="@+id/textView2"
android:layout_gravity="center_vertical" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:ems="10"
android:id="@+id/composeEditTextMessage"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/compose_cancel"
android:id="@+id/composeButtonCancel" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/compose_send"
android:id="@+id/composeButtonSend" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:id="@+id/composeNotDefault"
android:visibility="invisible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/compose_not_default"
android:id="@id/composeNotDefault" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/compose_set_default"
android:id="@+id/composeButtonSetDefault" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
ComposeSMSActivity.java
public class ComposeSMSActivity extends Activity {
Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_compose_sms);
mActivity = this;
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
getActionBar().setDisplayHomeAsUpEnabled(true);
}
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_compose_sms, container, false);
rootView.findViewById(R.id.composeButtonCancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavUtils.navigateUpTo(getActivity(), new Intent(getActivity(), ConversationListActivity.class));
}
});
rootView.findViewById(R.id.composeButtonSend).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String recipient = ((TextView) rootView.findViewById(R.id.composeEditTextTo)).getText().toString();
String message = ((TextView) rootView.findViewById(R.id.composeEditTextMessage)).getText().toString();
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(recipient, "ME", message, null, null);
}
});
return rootView;
}
}
}
แค่นั้นแหละ.
คุณสามารถใช้สิ่งนี้เพื่อส่ง SMS ไปยังหมายเลขใด ๆ :
public void sendsms(View view) {
String phoneNumber = "+880xxxxxxxxxx";
String message = "Welcome to sms";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber));
intent.putExtra("sms_body", message);
startActivity(intent);
}
คุณสามารถละเว้นหมายเลขโทรศัพท์เพื่อให้ผู้ใช้เพียงแค่เลือกจากผู้ติดต่อ แต่การแทรกข้อความ SMS ของคุณในร่างกาย รหัสสำหรับ Xamarin Android:
var uri = Uri.Parse("smsto:"); //append your number here for explicit nb
var intent = new Intent(Intent.ActionSendto, uri);
intent.PutExtra("sms_body", text);
Context.StartActivity(intent);
ที่ไหน
บริบทคือ Xamarin.Essentials.Platform.CurrentActivity ?? Application.Context