【问题标题】:How Do I send A Text Via SmsManager?如何通过 SmsManager 发送文本?
【发布时间】:2018-03-24 15:54:58
【问题描述】:

所以我有一个按钮,当我点击它时,我想发送一条短信。给谁,由editText 指定。当我使用该应用程序时,它说文本已发送,但是当我签入我的消息应用程序时,它显示没有发送任何内容。我该如何补救?

示例编号:“8667404531”(例如,这是一条机器人热线)

    EditText editText = (EditText) findViewById(R.id.editText);
    String myNum = editText.getText().toString();


    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(myNum, null, "Wake Up!", null, null);
        Toast.makeText(getApplicationContext(), "SMS Sent!",
                Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(),
                "SMS faild, please try again later!",
                Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }

【问题讨论】:

  • 您是否在清单中添加了权限
  • @ElMaravilla 仅设置清单权限是不够的,您还应该调用 checkSelfPermission() 并在其回调方法中收到肯定的响应。

标签: java android sms smsmanager


【解决方案1】:

首先,确保您已在AndroidManifest.xml 中设置此权限:

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

其次,您应该先检查自己的权限,然后才能发送任何消息。您可以通过checkSelfPermission() 调用和相应的onRequestPermissionsResult() 回调来实现。

查看下面的这段代码,它包含与从设备请求权限相关的重要部分。下面的代码是一个完整的Activity 示例,用于从您的设备发送短信:

public class MainActivity extends AppCompatActivity {

    EditText number, text;
    Button send;

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

        number = (EditText) findViewById(R.id.editText);
        text = (EditText) findViewById(R.id.editText2);
        send = (Button) findViewById(R.id.button);

        if(ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED){
            if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                    Manifest.permission.SEND_SMS)){
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.SEND_SMS}, 1);
            } else {
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.SEND_SMS}, 1);
            }
        } else {
            //do nothing
        }

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String phoneNumber = number.getText().toString();
                String messageText = text.getText().toString();

                try {
                    SmsManager smsManager = SmsManager.getDefault();
                    smsManager.sendTextMessage(phoneNumber, null, messageText, null, null);
                    Toast.makeText(MainActivity.this, "Message sent!", Toast.LENGTH_SHORT).show();
                } catch (Exception e){
                    Toast.makeText(MainActivity.this, "Sending failed!", Toast.LENGTH_SHORT).show();
                }

            }
        });

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode){
            case 1:{
                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    if(ContextCompat.checkSelfPermission(MainActivity.this,
                            Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED){
                        Toast.makeText(MainActivity.this, "Permission granted!", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(MainActivity.this, "Permission not granted!", Toast.LENGTH_SHORT).show();
                }
                return;
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2016-03-02
    • 1970-01-01
    • 2012-08-04
    • 2012-02-13
    • 2022-12-11
    相关资源
    最近更新 更多