Android 如何在主活动中注册接收者?
我有一个Android 如何在主活动中注册接收者?,android,broadcastreceiver,android-activity,Android,Broadcastreceiver,Android Activity,我有一个SmsReceiver类,我想在主活动中注册它,我应该怎么做 我是Android新手。要让服务接收短信,请执行以下步骤: 更新清单以授予应用程序接收SMS的权限 (写短信、读短信、接收短信) 不要使用receiver intent筛选器更新清单!(哪个 每个在线示例代码似乎都可以) 在服务中,在服务类中创建嵌套的BroadcastReceiver类 private class SMSreceiver extends BroadcastReceiver { private fina
SmsReceiver
类,我想在主活动中注册它,我应该怎么做
我是Android新手。要让服务接收短信,请执行以下步骤:
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);
}
}
}
}
encase您想知道为什么我没有从一个单独的BroadcastReceiver类中绑定到我的服务-它不起作用,因为
bindService()
不可用。您可以做两件事:
清单中创建并定义BroadcastReceiver
广播接收器
BroadcastReceiver
。
在您的活动范围内声明MyBroadcastReceiver
:
MyBroadcastReceiver mMyBroadcastReceiver;
通过以下方式在活动中注册广播接收器
:
IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
this.registerReceiver(mMyBroadcastReceiver, filter);
当您要求在您的main活动中注册BroadcastReceiver
时,它适用于registerReceiver codewise-in main活动
下面是代码的样子==>
public class MainActivity extends Activity
{
BroadcastReceiver smsReceiver;
private IntentFilter myFilter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
registerReceiver(smsReceiver, myFilter); // register BroadCastReceiver at time of initialization of Activity with proper Intent-Filter
}
@Override
protected void onPause()
{
unregisterReceiver(smsReceiver); // UnRegister BroadCastReceiver as you no longer have your activity at Foreground -- Saving CPU & Battery Drainage
super.onPause();
}
@Override
protected void onResume()
{
registerReceiver(smsReceiver, myFilter); // Register BroadCastReceiver Once again as your activity comes from pause to forground state again.
super.onResume();
}
smsReceiver = new BroadcastReceiver() //Implementation of your BroadCastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Do whatever you like as sms is received and caught by these BroadCastReceiver
Toast.makeText(context, "SMS Received", Toast.LENGTH_LONG).show();
}
};
}
希望这对API级别19及以上的用户有所帮助
IntentFilter smsFilter = new IntentFilter();
smsFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(this.receiver, filter);
你可以看看这篇文章,关于这个话题有很多答案。检查,和。可能的副本
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//some action
}
};
IntentFilter filter = new IntentFilter("YOUR_ACTION");
registerReceiver(receiver, filter);
IntentFilter smsFilter = new IntentFilter();
smsFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(this.receiver, filter);