关于Android服务里面的AsyncTask方法的问题 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于Android服务里面的AsyncTask方法的问题

2016-03-16 08:49:56 1996 1

最近,小弟在写一个拦截短信的android 程序,在开启拦截服务这个地方被卡了好几天了,
换了好几种思路,最后参考一种网上的思路用了AsyncTask这种思路。

但是运行程序的时候报错,但是不太清楚哪里出错了,求大神帮看一看服务的这个包。

public class MsgService extends Service{
    private boolean D=true;
    private ReceiveMessage mReceiver;
     @Override
     public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
          }
     @Override
      public void onCreate() {
        if(D){
          Log.i("msgservice"," onCreate()");
        }
        //注册动态广播
        mReceiver=new ReceiveMessage();
        IntentFilter filter=new IntentFilter();
        filter.setPriority(Integer.MAX_VALUE);
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(mReceiver, filter);
        super.onCreate();
      }
      @Override
      public int onStartCommand(Intent intent, int flags, int startId) {
        if(D){
          Log.i("msgservice","onStartCommand");
        }
        return super.onStartCommand(intent, flags, startId);
      }
      @Override
      public void onDestroy() {
        if(D){
          Log.i("msgservice","onDestroy() ");
        }
        //取消广播接收者
        unregisterReceiver(mReceiver);
        mReceiver=null;
        super.onDestroy();
      }
     class ReceiveMessage extends BroadcastReceiver {
         private String address;
         private String fullMessage;
            private MyDatabaseHelper dbHelper;
             // 当接收到短息时被触发
             @Override
             public void onReceive(Context context, Intent intent) {

                 Bundle bundle = intent.getExtras();
                 // 判断是否有数据
                 if (bundle != null) {
                     // 通过pdus可以获得接收到的所有短信消息
                     Object[] pdus = (Object[]) bundle.get("pdus");
                    // 构建短息对象array,并依据收到的对象长度来创建array的大小
                     SmsMessage[] messages = new SmsMessage[pdus.length];
                     for (int i = 0; i < pdus.length; i++) {
                             messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                            }
                            address = messages[0].getOriginatingAddress();//获取发送方号码
                            fullMessage = "";
                            for (SmsMessage message : messages) {
                                fullMessage +=message.getMessageBody();//获取短信内容
                            }

                            new AsyncTask<Void,Void,Void>(){
                              @Override
                              protected Void doInBackground(Void... params) {
                                return null;
                              }

                              @Override
                              protected void onPostExecute(Void result) {

                                  if(fullMessage.startsWith("Test")||fullMessage.endsWith("Test"))//发现短信,拦截,并且存入数据库
                                    {
                                      abortBroadcast();    // 取消广播(这行代码将会让系统接受短信程序收不到短息)
//入库要从新写,用AsyncTask
                                      new AsyncTask<Void,Void,Void>(){

                                          @Override
                                            protected Void doInBackground(Void... params) {
                                              //把陌生人短信存储在数据库表里
                                              SQLiteDatabase db = dbHelper.getWritableDatabase();
                                              ContentValues values = new ContentValues();
                                              values.put("phonenumber",address);
                                              values.put("content",fullMessage);
                                              db.insert("TEXT", null, values);
                                                return null;
                                          }
                                            }.execute();
                                        }
                                    super.onPostExecute(result);
                              }

                        }.execute();
                              }
                       }
             }
}

在发送一个拦截开头为Test的短息的时候,报错如图:

screenshot
screenshot

取消 提交回答
全部回答(1)
  • 爵霸
    2019-07-17 19:03:16

    日志里caused by原因是空指针,程序97行,空指针好解决,断点看看怎么空了

    0 0
相关问答

0

回答

[实践] Android5.1.1源码 - 在Framework中添加自定义系统服务

2016-05-30 16:00:40 5293浏览量 回答数 0

1

回答

用户反馈Android SDK:找不到alicloud-android-feedback.aar,如

2020-03-27 21:32:17 500浏览量 回答数 1

1

回答

移动推送Android SDK:在集成移动推送,日志出现load sdk file fail是什么问

2020-03-27 23:16:02 1625浏览量 回答数 1

1

回答

TSDB的SDK如果把客户端应用在Android平台上?

2018-11-01 14:41:35 1850浏览量 回答数 1

2

回答

android SDK如何获取访问令牌(access token)

2018-09-25 15:10:22 3819浏览量 回答数 2

2

回答

在Android P禁止访问非SDK接口后,Sophix能在Android P上正常运行吗

2018-07-26 14:01:48 3333浏览量 回答数 2

1

回答

阿里云短视频SDK,android版编译合成视频画面自动填充失效,一直都被裁减.

2018-06-07 11:28:52 2454浏览量 回答数 1

0

回答

用户反馈Android SDK:如何关闭沉浸式任务栏?

2017-10-24 10:51:51 1271浏览量 回答数 0

1

回答

Android SDK Manager

2016-06-13 14:36:16 1881浏览量 回答数 1

1

回答

在android sdk manager中下载东西出现怎么图这是什么原因?如何解决?

2016-03-10 08:42:15 1710浏览量 回答数 1
+关注
2
文章
9426
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载