M
M
math_man2017-02-24 23:51:58
Android
math_man, 2017-02-24 23:51:58

Problem with streams and SMS?

I'm trying to send sms programmatically. But when creating an SMS object - an error:

E/AndroidRuntime: FATAL EXCEPTION: Thread-25964
                  Process: com.example.pilig.sms3, PID: 30874
                  java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                      at android.os.Handler.<init>(Handler.java:209)
                      at android.os.Handler.<init>(Handler.java:123)
                      at android.app.Activity.<init>(Activity.java:788)
                      at com.example.pilig.sms3.SMS.<init>(SMS.java:0)
                      at com.example.pilig.sms3.End.sendSMS(End.java:107)
                      at com.example.pilig.sms3.Requester$1.run(Requester.java:59)
                      at java.lang.Thread.run(Thread.java:818)

SMS class:
package com.example.pilig.sms3;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.telephony.SmsManager;

/**
 * Created by pilig on 11.01.2017.
 */

public class SMS extends Activity {
    String phoneNo,  message, id;
    Requester requester;
    SMS(){}

    SMS(String phoneNo, String message, String id, Requester requester) {
        this.requester = requester;
        this.phoneNo = phoneNo;
        this.message = message;
        this.id = id;
        sendSMS();
    }

    public void sendSMS(){
        String SENT="SMS_SENT";
        String DELIVERED="SMS_DELIVERED";
        PendingIntent sentPI= PendingIntent.getBroadcast(getBaseContext(),0,
                new Intent(SENT),0);

        PendingIntent deliveredPI= PendingIntent.getBroadcast(getBaseContext(),0,
                new Intent(DELIVERED),0);
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1){
                switch(getResultCode())
                {
                    case Activity.RESULT_OK:
                        requester.setStatus(id, "2");
                        Account.sent++;
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        break;
                }
            }
        },new IntentFilter(SENT));
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1){
                switch(getResultCode())
                {
                    case Activity.RESULT_OK:{
                        requester.setStatus(id, "3");
                        Account.get++;
                        Account.list.remove(this);
                        break;
                    }

                    case Activity.RESULT_CANCELED:{
                        requester.setStatus(id, "4");
                        Account.notGet++;
                        Account.list.remove(this);
                        break;
                    }

                }
            }
        },new IntentFilter(DELIVERED));
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNo,null, message, sentPI, deliveredPI);

    }
}

I create an SMS object in the following method:
public void getSMSToSend()  {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while(flag){
                    String sql = "http://80.252.241.43/telephony/android/get_sms.php?login=" + Account.login + "&password=" + Account.password;
                    //System.out.println(sql);
                    String text = request(sql);
                    System.out.println(text);
                    String phone = text.substring(0, text.indexOf("|"));
                    text = text.substring(text.indexOf("|")+1);
                    String sms = text.substring(0, text.indexOf("|"));
                    String id = text.substring(text.indexOf("|")+1);
                    if(!id.equals("")&&!sms.equals("")&&!phone.equals("")) {
                        <i><b>SMS message = new SMS(phone, sms, id, getThis());</b></i>
                        Account.list.add(message);
                    }
                }
            }
        });
        thread.start();

    }

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question