为什么下面的代码不能输出”receive message“第一个类package com.example.broadcastreceiver_2;import android.os.Bundle;
import android.app.Activity;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity { /** Called when the activity is first created. */
private Button registerButton = null;
private Button unregisterButton = null;
private SMSReceiver smsReceiver = null;
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerButton = (Button)findViewById(R.id.register);
registerButton.setOnClickListener(new RegisterReceiverListener());
unregisterButton = (Button)findViewById(R.id.unregister);
unregisterButton.setOnClickListener(new UnRegisterReceiverListener());
}
class RegisterReceiverListener implements OnClickListener{ public void onClick(View v) {
//生成一个BroiadcastReceiver对象
smsReceiver = new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
//为IntentFilter添加一个Action
filter.addAction(SMS_ACTION);
//将BroadcastReceiver对象注册到系统当中
MainActivity.this.registerReceiver(smsReceiver, filter);
}
}
class UnRegisterReceiverListener implements OnClickListener{
public void onClick(View v) {
//解除BroadcastReceiver对象的注册
MainActivity.this.unregisterReceiver(smsReceiver);
}
}
}
广播Broadcast类
package com.example.broadcastreceiver_2;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;public class SMSReceiver extends BroadcastReceiver{ @Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("receiver message");
}}
布局xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" ><Button
android:id="@+id/register"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="注册"
/>
<Button
android:id="@+id/unregister"
android:layout_below="@id/register"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="解除"
/></RelativeLayout>然后再DDMS中的Emulator control中输入一下内容
Incoming number:123
选择SMS
Message:hello,android
最后点击send
这样子之后android虚拟机中可以可以接收到一条短信,但是通过程序注册的那个广播类却不能执行onReceiver()方法输出“receivermessage”请问各位大神这是为什么,哪里有问题????
急求答案啊!!!!!!!!!!
import android.app.Activity;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity { /** Called when the activity is first created. */
private Button registerButton = null;
private Button unregisterButton = null;
private SMSReceiver smsReceiver = null;
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerButton = (Button)findViewById(R.id.register);
registerButton.setOnClickListener(new RegisterReceiverListener());
unregisterButton = (Button)findViewById(R.id.unregister);
unregisterButton.setOnClickListener(new UnRegisterReceiverListener());
}
class RegisterReceiverListener implements OnClickListener{ public void onClick(View v) {
//生成一个BroiadcastReceiver对象
smsReceiver = new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
//为IntentFilter添加一个Action
filter.addAction(SMS_ACTION);
//将BroadcastReceiver对象注册到系统当中
MainActivity.this.registerReceiver(smsReceiver, filter);
}
}
class UnRegisterReceiverListener implements OnClickListener{
public void onClick(View v) {
//解除BroadcastReceiver对象的注册
MainActivity.this.unregisterReceiver(smsReceiver);
}
}
}
广播Broadcast类
package com.example.broadcastreceiver_2;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;public class SMSReceiver extends BroadcastReceiver{ @Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("receiver message");
}}
布局xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" ><Button
android:id="@+id/register"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="注册"
/>
<Button
android:id="@+id/unregister"
android:layout_below="@id/register"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="解除"
/></RelativeLayout>然后再DDMS中的Emulator control中输入一下内容
Incoming number:123
选择SMS
Message:hello,android
最后点击send
这样子之后android虚拟机中可以可以接收到一条短信,但是通过程序注册的那个广播类却不能执行onReceiver()方法输出“receivermessage”请问各位大神这是为什么,哪里有问题????
急求答案啊!!!!!!!!!!
System.out.println("receiver message");你要告诉广播的发送端 你要接受的是哪个广播,
String actionStr = arg1.getAction();
if(actionStr.equals(SMS_ACTION))
{
System.out.println("receiver message");//建议使用log
}
[/code]