我有一个SmsReceiver
课,我想在主要活动中注册,我该怎么办?
我是Android新手。
答案 0 :(得分:3)
你可以做两件事:
BroadcastReceiver
Manifest
BroadcastReceiver
。对于选项2(您要问的):
在代码中创建BroadcastReceiver
(MyBroadcastReceiver)。
在Activity
:
MyBroadcastReceiver mMyBroadcastReceiver;
在BroadcastReceiver
中注册Activity
:
IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
this.registerReceiver(mMyBroadcastReceiver, filter);
答案 1 :(得分:2)
要让服务接收短信,请按照以下步骤操作:
在您的服务中,在您的服务类
中创建一个嵌套的BroadcastReceiver类private class SMSreceiver extends BroadcastReceiver
{
private final String TAG = this.getClass().getSimpleName();
@Override
public void onReceive(Context context, Intent intent)
{
Bundle extras = intent.getExtras();
String strMessage = "";
if ( extras != null )
{
Object[] smsextras = (Object[]) extras.get( "pdus" );
for ( int i = 0; i < smsextras.length; i++ )
{
SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
String strMsgBody = smsmsg.getMessageBody().toString();
String strMsgSrc = smsmsg.getOriginatingAddress();
strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;
Log.i(TAG, strMessage);
}
}
}
}
在您的服务类中,注册以接收
android.provider.Telephony.SMS_RECEIVED
意图过滤器:
public class ServiceCommunicator extends Service
{
private SMSreceiver mSMSreceiver;
private IntentFilter mIntentFilter;
@Override
public void onCreate()
{
super.onCreate();
//SMS event receiver
mSMSreceiver = new SMSreceiver();
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mSMSreceiver, mIntentFilter);
}
@Override
public void onDestroy()
{
super.onDestroy();
// Unregister the SMS receiver
unregisterReceiver(mSMSreceiver);
}
}
就是这样!
注意:强>
包括你想知道为什么我没有从一个单独的BroadcastReceiver类中绑定到我的服务 - 它不起作用,因为bindService()
不可用。
答案 2 :(得分:1)
对于API级别19及以上
IntentFilter smsFilter = new IntentFilter();
smsFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(this.receiver, filter);
答案 3 :(得分:0)
正如您要求在符合BroadcastReceiver
的{{1}}内注册MainActivity
这是代码看起来像==&gt;
registerReceiver-codewise-inside-MainActivity
答案 4 :(得分:0)
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//some action
}
};
IntentFilter filter = new IntentFilter("YOUR_ACTION");
registerReceiver(receiver, filter);
希望这有帮助