broadcastreceiver-自己做了一个接收发送短信的练习,但是一点发送按钮就报错,也接收不了信息。求大神

问题描述

自己做了一个接收发送短信的练习,但是一点发送按钮就报错,也接收不了信息。求大神



帮帮小弟,良辰必有重谢!!!targetSDK23,minSDK18

package com.example.think.smstest;

import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private TextView sender, content;

private MessageReceiver messageReceiver;

private SendStatusReceiver sendStatusReceiver;

private IntentFilter intentFilter, sendFilter;

private EditText to, msgInput;

private Button send;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    sender = (TextView) findViewById(R.id.sender);
    content = (TextView) findViewById(R.id.content);
    intentFilter = new IntentFilter();
    intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
     messageReceiver = new MessageReceiver();
    registerReceiver(messageReceiver, intentFilter);

    to = (EditText) findViewById(R.id.to);
    msgInput = (EditText) findViewById(R.id.msg_input);
    sendFilter = new IntentFilter();
    sendFilter.addAction("SENT_SMS_ACTION");
    sendStatusReceiver = new SendStatusReceiver();
    registerReceiver(sendStatusReceiver, sendFilter);
    send = (Button) findViewById(R.id.send);
    send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SmsManager smsManager = SmsManager.getDefault();
            Intent intent = new Intent("SENT_SMS_ACTION");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
            smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), pendingIntent, null);
        }
    });
}

class MessageReceiver extends BroadcastReceiver {

    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        Object[] pdus = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdus.length];
        for (int i=0; i<messages.length; i++){
            messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i],null);
        }
        String address = messages[0].getOriginatingAddress();
        String fullMessage = "";
        for (SmsMessage message : messages) {
            fullMessage += message.getMessageBody();
        }
        sender.setText(address);
        content.setText(fullMessage);
    }
}

class SendStatusReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (getResultCode() == RESULT_OK) {
            Toast.makeText(context, "send succeed", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "send failed", Toast.LENGTH_SHORT).show();
        }
    }
}

    @Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(messageReceiver);
    unregisterReceiver(sendStatusReceiver);
}

}

解决方案

模拟器发送不了短信吧?我记得貌似是,可以用真机测试一下试试。

你那个错误的意思是你收件人地址可能有问题。、

解决方案二:

错误提示是无效的目标地址,也就是说不通,你用的是模拟器吧,模拟器发不了短信的。

解决方案三:

要实验一下是否能实现发送短信的功能,如果你是部署到真机调试的话,可直接输入电话号码和短信内容,便可发送短信,如果是用模拟器的话,可开启2个模拟器,模拟器中的那个5554:AVD中的5554便是它本身的电话号码,启动第二个模拟器的话,它的电话号码将为5556,在输入手机号中输入5556,短信内容可任意写,点击发送,便可在5556那个模拟器接收到5554那个模拟器发来的信息。

解决方案四:

模拟器是不行的,在真机上进行测试然后再看效果

解决方案五:

模拟器也是可以调试发送短信的,不过相对麻烦一些。
按照楼上的方法是可以的。

 要实验一下是否能实现发送短信的功能,如果你是部署到真机调试的话,可直接输入电话号码和短信内容,便可发送短信,如果是用模拟器的话,可开启2个模拟器,模拟器中的那个5554:AVD中的5554便是它本身的电话号码,启动第二个模拟器的话,它的电话号码将为5556,在输入手机号中输入5556,短信内容可任意写,点击发送,便可在5556那个模拟器接收到5554那个模拟器发来的信息。

建议还是使用真机进行调试、

解决方案六:

我真机模拟器都试了……~~

时间: 2024-08-31 23:57:28

broadcastreceiver-自己做了一个接收发送短信的练习,但是一点发送按钮就报错,也接收不了信息。求大神的相关文章

做了一个asp.net的相册,想在编辑图片的时候,能在图片上添加文字。求大神们帮忙

问题描述 如题,求大神们帮忙.给点建议.或者代码的例子 解决方案 解决方案二:用Bitmap类型和Image命名空间的各种东西能直接编辑图片.只用来展示,不改变原来的图片内容的话可以用DIV遮罩一下啊.解决方案三:引用1楼sunzongbao2007的回复: 用Bitmap类型和Image命名空间的各种东西能直接编辑图片.只用来展示,不改变原来的图片内容的话可以用DIV遮罩一下啊. 我刚学的,不太明白,能给具体的吗解决方案四:图片添加文字不就是Graphicsgraphics=Graphics.

想做一个文库网站,下载了一个MTCEO文库系统的源码,有一段读取SWF的代码不太懂,求大神帮助

问题描述 想做一个文库网站,下载了一个MTCEO文库系统的源码,有一段读取SWF的代码不太懂,求大神帮助 10C function geturlipstr($ext$filename){//获得预览代码,本地模式 if(file_exists('./' . C('mtceo_attach_path').""docswf/data/"".$filename."".php"")){ $ipstr=F($filename'''./'

三星S4 4G无法发送短信怎么办?S4 4G无法发送短信解决办法

1.三星S4 4G界面有一点不一样哦,我们点击[信息]图标进入,如果没找到自己在下一屏找找吧.     2.点击手机左下角的[菜单]键,然后选择[设定].   3.然后在进入设定中我们找到[短信/彩信]它进入进入.     4.接着在打开的[信息中心]选项进入.     5.在此我们就可以点击[信息中心号码]输入号码了,记入中国要加+086才可以,然后点击[确定]即可.       最好我们再去试一下是不是可以发短信了呀,如果是不能发彩信我们需要在彩信设置中进行一些简单的设置哦.  

我正在做一个项目,需要聊天工具,想用环信的,请问怎么集成添加呀,求大神指教呀!!

问题描述 解决方案 重复发送是因为是在给自己发消息,发一条接收一条:即登录的是A账号,又跟A创建会话发送消息,则会出现上述现象.将创建会话的对象修改一下即可.解决方案二:官网有集成文档,可以先看下,解决方案三:我也看视频了,根据视频一步一步来操作的,可还是报错,这个是截图,求大神指点!!!解决方案四:删掉parse所有相关.parse只是demo用来显示头像的一个示范,一个解决方案.在自己集成的时需要自己去实现头像和昵称的显示,并且维护在自己的服务器.常用的方案有http://docs.ease

Android如何实现接收和发送短信

每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Activity中注册广播 4.添加接收短信权限 下面放上具体的代码  activity_main.xml文件用于显示短信发送者号码和显示短信内容 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

Android发送短信方法实例详解_Android

本文实例讲述了Android发送短信方法.分享给大家供大家参考,具体如下: 短信和打电话一样,都是android手机的基本功能,下面以实例说明android如何实现发送短信的功能. 程序如下所示: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.PendingIntent; import android.content.I

Android发送短信方法总结_Android

android API 中提供了SmsManager类处理短信.其中的sendTextMessage(num, null, content, pend, null)函数就是发送,具体介绍如下: SMS涉及的主要类SmsManager 实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员.公有方法: 1.ArrayList<String> divideMessage(String text) 当短信超过SMS消息的最大长度时,将短

java发送短信系列之限制发送频率_java

本篇是发送短信的第二部分, 这里我们介绍一下如何限制向同一个用户(根据手机号和ip)发送短信的频率. 1.使用session 如果是web程序, 那么在session中记录上次发送的时间也可以, 但是可以被绕过去. 最简单的, 直接重启浏览器 或者 清除cache等可以标记session的数据, 那么就可以绕过session中的记录. 虽然很多人都不是计算机专业的, 也没学过这些. 但是我们需要注意的是, 之所以限制发送频率, 是为了防止"短信炸弹", 也就是有人恶意的频繁的请求向某个

利用VBS发送短信的实现代码(通过飞信)_vbs

光看标题就已经觉得很牛逼了,听说过可以用 PHP 发送短信(飞信),也使用过 Python 实现的 PyFetion 发送过短信(飞信).我也看过对应的 PHP 和 Python 源码,实现起来还是比较复杂的,难道可以用 VBS 来实现? 看到代码后更觉得牛逼,竟然是使用 10086.cn (移动官网)上面的接口来实现的,飞信官方难道已经公布飞信接口了?若不是,难道是代码的作者自己发现的接口?那也太强大了!Google 了一下才发现,哦,都不是,而是 WAP 飞信.像我这种还在用着 2005 年

java发送短信系列之同步、异步发送短信_java

本篇本章是发送短信的第一部分, 说一下同步/异步发送短信的代码, 以后几篇我们稍微完善一下功能, 添加发送频率的限制和日发送次数的限制. 发送短信的方法可能不少, 我们的方法是使用服务商提供的服务. 一般来说, 这些服务都是和语言无关的, 这里我们使用java写示例程序.1.发送短信的接口 根据自己的情况选择服务商.2.开发文档 从开发文档中我们可以看到. 可以直接使用http请求也可以使用WebService请求发送短信. 由于DEMO文件夹下的java和jsp文件夹中的代码都是使用http请