![](/img/trans.png)
[英]How register Broadcast Receiver for media button in Oreo?
[英]How to register broadcast receiver?
这是我的源代码,每次运行它都会强制关闭...
public class MainActivity extends Activity {
private static String content;
private static String phone;
private String number;
private String message;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null)
{
number = "";
message = "";
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
number = msgs[i].getOriginatingAddress();
message = msgs[i].getMessageBody();
}
//---display the new SMS message---
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
SendMe();
}
}
}, null);
}
public void SendMe(){
PendingIntent pi = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, message, pi, null);
}
}
这是我得到的logcat...
06-28 14:39:00.331: ERROR/AndroidRuntime(396): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ftt.autospond/com.ftt.autospond.MainActivity}: java.lang.NullPointerException
06-28 14:39:00.331: ERROR/AndroidRuntime(396): at android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:1504)
06-28 14:39:00.331: ERROR/AndroidRuntime(396): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:807)
06-28 14:39:00.331: ERROR/AndroidRuntime(396): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
06-28 14:39:00.331: ERROR/AndroidRuntime(396): at com.ftt.autospond.MainActivity.onCreate(MainActivity.java:29)
您需要将接收器移到 onCreate 之外。 就像是 -
public class MainActivity extends Activity {
private static String content;
private static String phone;
private String number;
private String message;
private BroadcastReceiver receiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null)
{
number = "";
message = "";
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
number = msgs[i].getOriginatingAddress();
message = msgs[i].getMessageBody();
}
//---display the new SMS message---
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
SendMe();
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter();
filter.addAction(YOUR_SMS_ACTION);
this.registerReceiver(this.receiver, filter);
setContentView(R.layout.main);
}
public void SendMe(){
PendingIntent pi = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, message, pi, null);
}
}
可能会发生强制关闭,因为您正在从广播接收器中管理 UI。 在强制关闭之前,BR 的 onReceive 有 10 秒的限制。
要解决此问题,请使用 Activity 组件来生成您的 Toast。
我在这里有点困惑。 您似乎想为“SMS_RECEIVED”IntentFilter 注册一个BroadcastReceiver
,但据我所知,该过滤器尚未在代码中的任何地方声明。
尝试将registerReceiver {}
末尾的 null 替换为new IntentFilter("SMS_RECEIVED"));
看看它是否有效。 也许这是您收到 null 指针异常的原因。
即} } }, null);
到} } }, new IntentFilter("SMS_RECEIVED"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.