当前位置: 首页 > 知识库问答 >
问题:

SMS DeliveryBroadcast(BroadCastRecader)OnRecve永远不会调用

居和顺
2023-03-14

我在测试一些短信发送和接收结果应用程序。它按预期发送短信,并祝酒“短信发送”。但它从不祝酒“短信发送”。它也从来没有达到

Log.i("BROADCASTRECEIVER", String.valueOf(getResultCode())); 

这意味着从不需要为结果SMS_DELIVERED...知道为什么吗?...

public class C extends Activity {

    static String[] params;

    static Context context;
    ProgressDialog pd;
    BroadcastReceiver smsDeliveryBroadcast, smsSendBroadcast;
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.c);
        params = new String[3];
        params[0] = "00905067161660";
        params[1] = "smsC.";
        params[2] = "smsC..";
        new ServerSMSThread().execute(params);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        unregisterReceiver(smsDeliveryBroadcast);
        unregisterReceiver(smsSendBroadcast);
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub

        super.onResume();
    }

    public void sendSMS(String phoneNumber, String message) {
        Log.i("NO", phoneNumber);
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
                SENT), 0);

        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);

        registerSMS();

        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);

    }

    private void registerSMS() {
        smsSendBroadcast = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {


                // TODO Auto-generated method stub
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT)
                            .show();
                    Log.i("MONITOR", "SMS Gonderildi");
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(context,
                            "SMS sending failed: Generic failure",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(context, "SMS sending failed: No service",
                            Toast.LENGTH_SHORT).show();
                    Log.i("MONITOR", "SMS sending failed: No service");
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(context, "SMS sending failed: Null PDU",
                            Toast.LENGTH_SHORT).show();
                    Log.i("MONITOR", "SMS sending failed: Null PDU");
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(context, "SMS sending failed: Radio off",
                            Toast.LENGTH_SHORT).show();
                    Log.i("MONITOR", "SMS sending failed: Radio off");
                    break;
                }
            }
        };
        smsDeliveryBroadcast = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                Log.i("BROADCASTRECEIVER", String.valueOf(getResultCode()));
                // TODO Auto-generated method stub
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT)
                            .show();
                    Log.i("MONITOR", "SMS Teslim edildi");
                    break;
                case Activity.RESULT_CANCELED:
                    Toast.makeText(context, "SMS not delivered",
                            Toast.LENGTH_SHORT).show();
                    Log.i("MONITOR", "SMS not delivered");
                    break;

                default:
                    Toast.makeText(context, "SMS result bilinmiyor",
                            Toast.LENGTH_SHORT).show();
                    Log.i("MONITOR", "SMS result bilinmiyor");
                    break;
                }
            }
        };

        // ---when the SMS has been sent---
        registerReceiver(smsSendBroadcast, new IntentFilter(SENT));
        // ---when the SMS has been delivered---
        registerReceiver(smsDeliveryBroadcast, new IntentFilter(DELIVERED));
    }



    public class ServerSMSThread extends AsyncTask<String, Void, Void> {

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            if (pd.isShowing())
                pd.dismiss();
            startActivity(new Intent(C.this,B.class).addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pd = ProgressDialog.show(C.this, "Sending SMS...", "Please wait.");
            Log.i("MONITOR", "SMS Gonderiliyor");
        }

        @Override
        protected Void doInBackground(String... params) {
            // TODO Auto-generated method stub
            for (int i = 1; i < params.length; i++) {
                sendSMS(params[0], params[i]);
            }
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
    }

}

Androidanifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tekeli.order"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="11" />
    <uses-permission android:name="android.permission.SEND_SMS" ></uses-permission>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ActivityOrderActivity"
            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=".B" ></activity>
         <activity android:name=".C"></activity>
    </application>

</manifest>

共有1个答案

蓝恩
2023-03-14

我想你应该试着注册你的接收器(smsSendBroadcast

我在这里做类似的事情!!!Android PendingIntent额外功能,不接收BroadcastRecencer

 类似资料:
  • 问题内容: 看过很多论坛,但没有找到答案…简单的东西,用@PostLoad注释的方法永远不会被调用…通过@EntityListeners添加了侦听器,但问题仍然存在。我正在使用基于SessionFactory的配置。 问题答案: 当使用基于基础的配置时,EJB3 注释不起作用,后期加载方法将永远不会被调用。 使用Hibernate的Interceptor或事件或基于基本的配置。

  • 问题内容: 在下一个代码中,我尝试调用deinit方法以释放对该实例的所有引用,但从未调用过deinit。为什么? 问题答案: 适用于Swift的Xcode 不能像常规应用程序一样工作;它们不只运行一次。创建的对象保留在内存中,可以检查直到更改代码为止,此时将重新评估整个操场。发生这种情况时,所有先前的结果都将被丢弃,并且所有对象都将被释放时,您将看不到任何结果。 您的代码是正确的,但是Playg

  • 问题内容: 我正在开发游戏,但扫描仪遇到了一个小问题。我收到了一个从未关闭过的资源泄漏扫描程序。 但是我认为我的扫描仪在没有关闭之前就可以正常工作。但是现在不是。有人可以帮我吗? 问题答案: 我假设您正在使用Java 7,因此会收到编译器警告,当您不关闭资源时,通常应在finally块中关闭扫描程序。 甚至更好:使用新的 Try with resource语句 :

  • 问题内容: 我正在使用Flask-WTF: 这是我的表格: 这是控制器: 现在的问题是,如果您查看我的打印语句,它将始终打印已提交的内容,但从不打印有效的内容,并且永远不会执行validate_on_submit()。为什么? 问题答案: 您没有在HTML表单中插入CSRF字段。 添加到模板(docs)后,表单将按预期验证。 验证表单后添加,以查看出现的错误。 在验证之前将为空。在这种情况下,会出

  • 1)我的plist配置提供背景模式: 2) 在中,我有: 3) 我在委托中声明了协议。 4)我实现了以下方法,但它永远不会被触发。(只有当我用“XCode-”模拟获取时才有效 为什么?这是DP5测试错误吗?我应该雷达这个吗?

  • 问题内容: 我今天发现了一种不寻常的Java方法: 根据我所读过的有关Java传递变量(不管是否传递复杂对象)的行为的所有资料,该代码完全不起作用。所以…我在这里想念什么吗?是我身上遗失了一些微妙之处,还是这段代码属于thedailywtf? 问题答案: 正如Rytmis所说,Java按值传递引用。这意味着您可以合法地对方法的参数调用变异方法,但不能重新分配它们并期望值传播。 例: 编辑: 在这种