我已经写好的了一个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);
}
}
}
}
}这个那个继承广播接受者的类。
我现在的做法是在这个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);
}
}
}
}
}这个那个继承广播接受者的类。
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);
}
就是这个方法害死我了。模拟机上可以跑、真机到这里就挂掉有木有!!!
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);
}
就是这个方法害死我了。模拟机上可以跑、真机到这里就挂掉有木有!!!