我想用 Android 发一条短信。
短信发送的目的是什么?
我想显示组合短信视图与我的预定义文本传递在消息字段。
尝试下面的代码,然后呼叫,sendSMS("99999999999", "message");发送所需的号码短信。
sendSMS("99999999999", "message");
//---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文件。
AndroidManifest.xml
<uses-permission android:name="android.permission.SEND_SMS"/>
希望这个能帮上忙。
更新 来自评论: Class 是一个没有执行任何进程或者需要导航的类的活动。
您可以使用 Object.class 代替 DummyClashere.class。
在 Android 中,我们有 经理类,它管理诸如发送数据、文本和 pdu 短信等短信操作。通过调用静态方法 SmsManager.getDefault ()获取该对象。
SmsManager Javadoc
以下连结载有发送短讯的示例代码:
关于在 Android 系统中发送和接收短讯的文章
您可以使用以下代码:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)));
确保将 phoneNumber设置为要发送消息的电话号码
phoneNumber
你可以通过(来自评论)在短信中添加一条消息:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)); intent.putExtra("sms_body", message); startActivity(intent);
上面解释的一些内容只是为了将 SMS 置于“准备启动”状态。 正如 Senthil Mg 所说,你可以使用短信经理直接发送短信,但 SMSManager已被转移到 android.telephony.SmsManager
SMSManager
android.telephony.SmsManager
我知道这不是 很多的更多信息,但它可能会帮助某人的一天。
这招对我很管用。
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 中添加这一行
看看 这个
这可能对你有帮助。
这肯定会工作,在这个,发送消息没有使用任何意图。
SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("Phone Number", null, "Message", null, null);
此代码用于 在后台发送消息(不显示消息编写器),也可以在 广播接收器内部工作。如果要从广播接收器发送消息。
希望这个代码能帮到你:)
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); */ } }
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" />
我添加我的短信方法,如果它可以帮助某人。 小心使用 smsManager.sendTextMessage,如果文本太长,则消息不会消失。你必须尊重最大长度取决于编码。 更多信息请点击这里 < a href = “ https://stackoverflow. com/questions/25348086/SMS-Manager-send-mutlipart-message-when-there-is-less-than-160-words”> SMS Manager send mutlipart message when there’s less than 160-words
//到处使用
SMSUtils.sendSMS(context, phoneNumber, message);
//舱单
<!-- 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); } }
你可以用这个发送短信到任何号码:
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); }
希望这个可以帮助你..。
文件名 = 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 中添加这一行
这允许通过现有的应用程序发送文本信息。PhoneNumber-is String.如果您不希望指定电话号码,请使用空字符串“”。
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", phoneNumber, null)); sendIntent.putExtra("sms_body", "text message"); startActivity(sendIntent);
从 KitKat 及以上地址发送短信:- 在您的 < strong > 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 _ talk _ 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>
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); } } }); } }
这是短信布局和发送短信的代码:-
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>
片段 _ 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>
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; } } }
就是这样。
您可以省略电话号码,让用户只是从联系人中选择,但插入您的短信文本在正文中。代码是 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
Xamarin.Essentials.Platform.CurrentActivity ?? Application.Context