下面是我的源$ C $ c和它保持力关闭每次我运行它...
公共类MainActivity延伸活动{
私有静态字符串的内容;
私有静态字符串电话;
私人串号;
私人字符串信息;
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
registerReceiver(新BroadcastReceiver的(){
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
// ---得到通过短信---
捆绑包= intent.getExtras();
SmsMessage []封邮件= NULL;
如果(捆绑!= NULL)
{
号=;
消息=;
// ---检索收到的短信---
[对象]的PDU =(对象[])bundle.get(的PDU);
封邮件=新SmsMessage [pdus.length]
的for(int i = 0; I< msgs.length;我++){
封邮件[I] = SmsMessage.createFromPdu((字节[])的PDU [I]);
数=封邮件[I] .getOriginatingAddress();
消息=封邮件[I] .getMessageBody();
}
// ---显示新短信---
Toast.makeText(背景下,消息,Toast.LENGTH_SHORT).show();
发给我();
}
}
}, 空值);
}
公共无效SendMe(){
PendingIntent PI = PendingIntent.getActivity(此,0,
新的意图(这一点,MainActivity.class),0);
SmsManager的短信= SmsManager.getDefault();
sms.sendTextMessage(数字,空,消息,PI,NULL);
}
}
下面是logcat中,我得到...
06-28 14:39:00.331:ERROR / AndroidRuntime(396):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.ftt.autospond / com.ftt。 autospond.MainActivity}:显示java.lang.NullPointerException
06-28 14:39:00.331:ERROR / AndroidRuntime(396):在android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:1504)
06-28 14:39:00.331:ERROR / AndroidRuntime(396):在android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:807)
06-28 14:39:00.331:ERROR / AndroidRuntime(396):在android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
06-28 14:39:00.331:ERROR / AndroidRuntime(396):在com.ftt.autospond.MainActivity.onCreate(MainActivity.java:29)
解决方案
您需要将您的接收器中的onCreate之外。类似 -
公共类MainActivity延伸活动{
私有静态字符串的内容;
私有静态字符串电话;
私人串号;
私人字符串信息;
私人BroadcastReceiver的接收器=新的BroadcastReceiver(){
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
// ---得到通过短信---
捆绑包= intent.getExtras();
SmsMessage []封邮件= NULL;
如果(捆绑!= NULL)
{
号=;
消息=;
// ---检索收到的短信---
[对象]的PDU =(对象[])bundle.get(的PDU);
封邮件=新SmsMessage [pdus.length]
的for(int i = 0; I< msgs.length;我++){
封邮件[I] = SmsMessage.createFromPdu((字节[])的PDU [I]);
数=封邮件[I] .getOriginatingAddress();
消息=封邮件[I] .getMessageBody();
}
// ---显示新短信---
Toast.makeText(背景下,消息,Toast.LENGTH_SHORT).show();
发给我();
}
}
};
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
IntentFilter的过滤器=新的IntentFilter();
filter.addAction(YOUR_SMS_ACTION);
this.registerReceiver(this.receiver,过滤器);
的setContentView(R.layout.main);
}
公共无效SendMe(){
PendingIntent PI = PendingIntent.getActivity(此,0,
新的意图(这一点,MainActivity.class),0);
SmsManager的短信= SmsManager.getDefault();
sms.sendTextMessage(数字,空,消息,PI,NULL);
}
}
Here is my source code and it keeps force closing everytime I run it...
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);
}
}
Here is the logcat I get...
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)
解决方案
You need to move your receiver outside the onCreate. something like -
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);
}
}