Android 如何在onreceive方法和扩展广播类中发送sms
我有两个操作发生在onreceive方法上,我需要类来扩展broadcastreceiver,我无法发送sms,因为它必须扩展活动,我想让sms自动重播,所以它必须在onreceive方法上,并且我获取消息并将其转换为语音,这两个操作中的每一个都在一个屏幕上切换Button我已经执行了转换操作,我可以注册和注销接收器,但它无法发送自动回复短信。如果您回答我,以下代码将自动发送短信 广播接收机类Android 如何在onreceive方法和扩展广播类中发送sms,android,broadcastreceiver,Android,Broadcastreceiver,我有两个操作发生在onreceive方法上,我需要类来扩展broadcastreceiver,我无法发送sms,因为它必须扩展活动,我想让sms自动重播,所以它必须在onreceive方法上,并且我获取消息并将其转换为语音,这两个操作中的每一个都在一个屏幕上切换Button我已经执行了转换操作,我可以注册和注销接收器,但它无法发送自动回复短信。如果您回答我,以下代码将自动发送短信 广播接收机类 public class SMSReceiver extends BroadcastReceiver
public class SMSReceiver extends BroadcastReceiver {
private static final String msg="talk u later";
/**
* @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
*/
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
String pno=smsMessage[0].getOriginatingAddress();
// show first message
Toast toast = Toast.makeText(context, "Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
toast.show();
sendSms(pno,msg);
}
private void sendSms(String phonenumber,String message)
{
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(phonenumber, null, message, null, null);
}
公共类SMSReceiver扩展了BroadcastReceiver{
私有静态最终字符串msg=“稍后再谈”;
/**
*@see android.content.BroadcastReceiver#onReceive(android.content.Context,android.content.Intent)
*/
@凌驾
公共void onReceive(上下文、意图){
Bundle=intent.getExtras();
对象消息[]=(对象[])bundle.get(“PDU”);
SmsMessage SmsMessage[]=新SmsMessage[messages.length];
对于(int n=0;n
}
接收者活动
公共类接收器扩展活动{
/**在首次创建活动时调用*/
私有整数状态=-1;
SMSReceiver receiver=null;
IntentFilter=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
逻辑的();
}
//====================================================
私有无效变更接收者状态(内部状态){
试一试{
如果(接收器==null)
接收器=新的SMSReceiver();
if(filter==null){
filter=新的IntentFilter();
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”);
}
如果(状态)
public class receiver extends Activity {
/** Called when the activity is first created. */
private int status=-1;
SMSReceiver receiver=null;
IntentFilter filter=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startLogic();
}
//====================================================
private void changeReceiverStatus(int status){
try{
if(receiver==null)
receiver=new SMSReceiver();
if(filter==null){
filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
}
if(status<0)
this.unregisterReceiver(receiver);
else
this.registerReceiver(receiver, filter);
}catch(Exception e){e.printStackTrace();}
}
//====================================================
private void startLogic(){
try{
final Handler handler=new Handler(){
public void handleMessage(Message msg){
try{
int status=msg.getData().getInt("status");
if(status<0)
Toast.makeText(receiver.this, "Unregistering receiver for 20 sec", Toast.LENGTH_SHORT).show();
else
Toast.makeText(receiver.this, "Registering receiver for 20sec", Toast.LENGTH_SHORT).show();
}catch(Exception e){e.printStackTrace();}
}};
new Thread(){
public void run(){
try{
while(true){
Bundle b=new Bundle();
b.putInt("status", status);
Message msg=new Message();
msg.setData(b);
handler.sendMessage(msg);
changeReceiverStatus(status);
status=status*-1;
Thread.sleep(20000);
}
}catch(Exception e){e.printStackTrace();}
}}.start();
}catch(Exception e){e.printStackTrace();}
}