我已经写好的了一个Activity。在这个Activity中我只要按下一个拍照的button.就会执行 mCamera.takePicture(mShutterCallback, null, mPictureCallback);然后通过mPictureCallback将刚拍的用socket推送至PC机。现在我想用短信来触发拍照。该怎么办?
我现在的做法是在这个Activity中放了代码注册的广播接收。
  public void onResume()
    {
     super.onResume();
     Log.d("OnResume","begin");
     mReceiver=new Smsreceiver();
     mfilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(mReceiver,mfilter);
        Log.d("onResume","end");
    }
    
    @Override
    public void onPause()
    {
     Log.d("onPuase","begin");
     unregisterReceiver(mReceiver);
     Log.d("onPause","end");
    }
但是一执行的话。执行完onResume马上执行onPause。然后报错连相机都还没打开。怎么办。
        public class  Smsreceiver extends BroadcastReceiver
{
private static final String queryString="@shoot"; 
@Override
        public void onReceive(Context context,Intent intent)
        {
         if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
         {
                //收到Broadcast会跑到这里   
             Log.d("短信","成功接收!");
         Bundle extras = intent.getExtras();         
         if (extras == null)     return;           
         Object[] pdus = (Object[]) extras.get("pdus"); //pdu为一条短信          
         for (int i = 0; i < pdus.length; i++) 
         {             
         SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);                     
         String msg=message.getMessageBody();             
         if(msg.startsWith(queryString))//短信开头以demo:shoot开头的话则你懂的
         {                
         Log.d("短信","成功进入!");
         mCamera.takePicture(mShutterCallback, null, mPictureCallback);
         }           
         } 
         }
        }   
}这个那个继承广播接受者的类。

解决方案 »

  1.   

    找到问题了。我的是双模手机伤不起啊。publicstatic SmsMessage createFromPdu(byte[] pdu) {
    SmsMessageBase wrappedMessage;
    int activePhone = TelephonyManager.getDefault().getPhoneType();
    if (PHONE_TYPE_CDMA == activePhone) {
    wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromPdu(pdu);
    } else {
    wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.createFromPdu(pdu);
    }
    returnnew SmsMessage(wrappedMessage);
    }
    就是这个方法害死我了。模拟机上可以跑、真机到这里就挂掉有木有!!!
      

  2.   

    找到问题了。我的是双模手机伤不起啊。publicstatic SmsMessage createFromPdu(byte[] pdu) {
    SmsMessageBase wrappedMessage;
    int activePhone = TelephonyManager.getDefault().getPhoneType();
    if (PHONE_TYPE_CDMA == activePhone) {
    wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromPdu(pdu);
    } else {
    wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.createFromPdu(pdu);
    }
    returnnew SmsMessage(wrappedMessage);
    }
    就是这个方法害死我了。模拟机上可以跑、真机到这里就挂掉有木有!!!