- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试在 Android 设备上收听任何传入的 SMS 消息,然后在收到 SMS 时在我的 Flutter 应用程序中显示 toast。我通过 EventChannel 连接到 Flutter 并使用 BroadcastReceiver 检测 SMS。每当我的广播接收器检测到 SMS 时,如何发送 events.success(message)
?
我尝试将 BroadcastReceiver 直接添加到 EventChannel 中,但这没有用。 flutter SMS 包似乎也不起作用。
这是我的 MainActivity 的样子:
public class MainActivity extends FlutterActivity{
public static final String STREAM = "com.myapp.thisapp/stream";
public static final String TAG = "THIS IS A MESSAGE: ";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
new EventChannel(getFlutterView(), STREAM).setStreamHandler(
new EventChannel.StreamHandler() {
@Override
public void onListen(Object args, final
EventChannel.EventSink events) {
//Send events.success() when SMS received
Log.w(TAG, "adding listener");
}
@Override
public void onCancel(Object args) {
Log.w(TAG, "cancelling listener");
}
}
);
}
}
这是我的 BroadcastReceiver 的代码:
public class IncomingSmsBroadcastReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent != null && SMS_RECEIVED.equals(intent.getAction())) {
final SmsMessage smsMessage = extractSmsMessage(intent);
processMessage(context, smsMessage);
}
}
private SmsMessage extractSmsMessage(final Intent intent) {
final Bundle pudsBundle = intent.getExtras();
final Object[] pdus = (Object[]) pudsBundle.get("pdus");
final SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);
return smsMessage;
}
private void processMessage(final Context context, final SmsMessage smsMessage) {
//TODO: Send message to event channel
}
}
每当 BroadCastReceiver 遇到 SMS 时,我希望将消息的内容发送到 EventChannel,EventChannel 会将消息文本发送到 Flutter 前端。我该怎么做?
最佳答案
根据您的第一条评论 Laksh22是的,这是可能的。
像这样为您的“Activity ”创建一个构造函数:
_yourclassnameState() {
platform.setMethodCallHandler(JavaMethodHandler);
}
然后实现响应处理程序
Future<dynamic> JavaMethodHandler(MethodCall methodcall) async
{
switch(methodcall.method)
{
case 'SMSRecived':
print('DataRecived is' + methodcall.arguments);
break;
default:
break;
}
}
然后在您的“BroadcastReceiver”中使用此代码调用 flutter 方法:
MethodChannel channel =new MethodChannel(view,CHANNEL);
channel.invokeMethod("SMSRecived",args, new MethodChannel.Result() {
@Override
public void success(Object o) {
System.out.println(o);
}
@Override
public void error(String s, String s1, Object o) {
}
@Override
public void notImplemented() {
}
});
Don't forget about CHANNEL. It should be the same both side.
Don't forget about manifest file.
For receiving SMS while your app is closed use 'ForegroundService'.Unfortunately Flutter dosen't support ForegroundService yet. you should implement it in Java.
关于java - 通过EventChannel向Flutter发送Android短信BroadcastReceiver数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088421/
我订阅了聊天室的 2 个 channel 。代码会卡在 C直到第二个 channel 收到新消息。然后卡在 A直到第一个 channel 收到新消息。 我怎样才能让 2 个 channel 分开工作。
我创建了一个新插件 flutter create --template plugin alfalfa 生成 lib/alfalfa.dart 包含 import 'dart:async'; impor
我目前正在学习 Flutter,特别是与设备本身进行通信。 目前我已经设置了一个 MethodChannel,我收到一个字符串列表作为结果,但现在我想将其更改为通过 EventChannel 在流上接
我正在尝试实现 EventChannel在我的 flutter 应用程序中收到以下错误: ══╡ EXCEPTION CAUGHT BY SERVICES LIBRARY ╞═════════════
我是 Flutter 开源 Geolocator 插件的维护者,并致力于重构插件。根据流行的请求,我尝试向检索当前位置的插件方法添加超时选项。 getCurrentLocation方法基本上监听位置更
我有一个 eventChannel 用于监听 webSockets,这工作正常。 我还想监听 USER_LOGGED_OUT 操作并关闭 channel 。 如果出现套接字错误或套接字关闭,我将通过发
我有一个 eventChannel 用于监听 webSockets,这工作正常。 我还想监听 USER_LOGGED_OUT 操作并关闭 channel 。 如果出现套接字错误或套接字关闭,我将通过发
如何在 redux saga 中处理 firebase auth 状态观察者? firebase.auth().onAuthStateChanged((user) => { }); 我想在我的应用程序
假设我有一个 flutter 应用程序,并且有一个前台服务,该服务有一个工作线程并不断向我发送有关用户位置的更新,这是目前返回随机整数的服务代码: Android 服务代码 public class
在Flutter中,平台 channel 分为三种,想了解一下它们的区别。 最佳答案 这些 channel 用于在原生代码(项目内的插件或原生代码)和 Flutter 框架之间进行通信。 方法 cha
我有 redux-saga,它在当前 session 等方面做了很多事情。 在这个 saga 中的一个生成器函数中,我有一个看起来像这样的地方: setSessionFailureHandler(()
使用 EventChannel 从 native 代码接收事件。 内容是字符串,我想用 SnackBar 显示它。 但是 Scaffold.of 返回 null。并且我没有找到由 Widget Bui
我正在尝试使用 websocket 使用 redux saga eventChannel 从第三方 api 获取实时数据,但由于某种原因,我收到如下错误: //sagas/index.js impor
这是我的 MainActivity.kt: override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
Redux 传奇 eventChannel是一个非常优雅的解决方案,可以从组件代码外部连接到外部事件,使它们更简洁。一个用例可能是对全局应用程序状态变化使用react,例如前台应用程序、后台应用程序、
我是一名优秀的程序员,十分优秀!