我有一个MainActivity和一个MyBroadcastReceiver。 tsql:
use [sql2016]
GO
GRANT VIEW DEFINITION TO [public]
GO
等待传入的短信并读取短信和senderId,它应该实时将此数据发送到BroadcastReceiver
。我试图在Activity本身中实现BroadcastReceiver,但它再次启动活动。
MainActivity
答案 0 :(得分:1)
请注意我们在Android中有两种广播接收器:
独立广播接收器(四个主要Android构建块之一)。此类接收器必须在Android清单文件中注册。无论应用程序的UI是否正在运行,只要收到匹配的意图,这些接收器就会运行。
活动广播接收器。这种接收器不需要在Manifest文件中注册,您应该在运行时注册它们。这些接收器仅在其封闭活动处于活动状态且正在运行时运行。
因此,如果您希望您的应用能够捕获所有SMS消息,无论其UI状态如何,您都需要前一个选项。但是,如果您需要应用程序在显示其活动时捕获SMS消息,则需要后一个选项。
答案 1 :(得分:0)
当BroadcastReceiver
收到短信通知时,它无法知道Activity
是否正在运行。如果您要启动活动,则需要创建适当的Intent
并致电Context.startActivity()
。
您应该创建一个扩展BroadcastReceiver
的类,而不仅仅是一个匿名内部类的实例。此外,您应使用BroadcastReceiver
中的<receiver>
标记注册AndroidManifest.xml
。
答案 2 :(得分:0)
根据您Receiver
仅在Activity
正在运行时调用的AndroidManifest
,您提出的任何代码都会被添加。而不是单独创建广播(从活动中移除并在您的包中创建新类)并在public class BinarySMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
try {
//Getting the data d
Intent intent = new Intent();
intent.setClassName(context, "activity.class");
intent.putExtras(bundle);
context.startActivity(intent);
} catch (Exception e) {
Log.e(TAG, "Exception: " + e.getMessage());
}
}
};
文件中注册并从Receiver中调用您的活动。
就像下面一样。
在你的包中创建BroadcastReceiver类。
<receiver android:name="com.company.application.SMSBroadcastReceiver" >
<intent-filter android:priority="500">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
AndroidManifest中的
// Client side code
socket.emit('an event', required_data, function(){
if(the string of text was included)
{
pass it as a parameter in the socket emit event
}
},
function(){
if(the image was included)
{
pass it as a parameter in the socket emit event
}
});