2012-07-12 116 views
0

我正在测试一些SMS发送和接收结果应用程序。它按预期发送短信,并发送“发送的短信”。但它永远不会敬酒“短信交付”。此外,它从来没有达到SMS DeliveryBroadcast(BroadCastReceiver)OnReceive从未被称为

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

这意味着的onReceive绝不会为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; 
     } 
    } 

} 

AndroidManifest.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> 

回答

相关问题