在android中发送短信
我想发短信。
短信发送的意图是什么……或其他任何代码? 我想用我的预定义文本在消息字段中传递来显示撰写短信视图。
有什么帮助吗?
您可以使用下面的代码:
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");
发送所需号码的短信。
//---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。
这一定会工作,在这个,发送消息,而不使用任何意图。
SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("Phone Number", null, "Message", null, null);
此代码用于后台发送消息(不显示消息编辑器) ,也可以在广播接收器内工作。 如果你想发送来自广播接收器的消息。
<uses-permission android:name="android.permission.SEND_SMS"/>
在Android中,我们有pipe理SMS操作的类SmsManager ,例如发送数据,文本和pdu SMS消息。 通过调用静态方法SmsManager.getDefault()获取此对象。
SmsManager Javadoc
检查以下链接以获取发送短信的示例代码:
关于在Android中发送和接收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置于“准备启动”状态。 因为Senthil Mg说你可以使用短信pipe理器直接发送短信,但是SMSManager已经被移动到了android.telephonySmsManager。
我知道这不是更多的信息,但有一天它可能会帮助别人。
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方法。 小心smsManager.sendTextMessage,如果文本太长,消息不会消失。 你必须尊重最大长度取决于编码。 更多信息此处SMSpipe理器发送mutlipart消息时less于160个字符
//使用EveryWhere
SMSUtils.sendSMS(context, phoneNumber, message);
//performance
<!-- 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); } }
希望这可以帮助你…
文件名= 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。 如果您不想指定电话号码,请使用空string“”。
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", phoneNumber, null)); sendIntent.putExtra("sms_body", "text message"); startActivity(sendIntent);
您可以使用此发送短信到任何数字。
在XML中使用这个
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:onClick="sendsms" android:id="@+id/button2" android:layout_centerVertical="true" android:layout_centerHorizontal="true" />
在Activity类中使用这个
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); }
需要SEND_SMS权限。
<uses-permission android:name="android.permission.SEND_SMS" />
只有为我工作的东西是:
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phone_number)); sendIntent.putExtra("sms_body", message); startActivity(sendIntent);
从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, ie 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>
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; } } }
而已。