Hello,
I am trying to integrate an Android SMS Catcher Library into my Fuse App using Uno. I keep getting the error below:
Compiling syntax tree
SmsCatcher\SmsCatcher.uno(19.10): E3111: 'Java' does not contain type or namespace 'Object'. Could you be missing a package reference?
D:\PROJECTS\MOBILE\FUSE\HikerPlay\SmsCatcher\SmsCatcher.uno(19,11): Error E3111: 'Java' does not contain type or namespace 'Object'. Could you be missing a package reference?SmsCatcher\SmsCatcher.uno(19.10): E3111: 'Java' does not contain type or namespace 'Object'. Could you be missing a package reference?
D:\PROJECTS\MOBILE\FUSE\HikerPlay\SmsCatcher\SmsCatcher.uno(19,11): Error E3111: 'Java' does not contain type or namespace 'Object'. Could you be missing a package reference?0.48 s
from this line
Java.Object _smsCatcher;
If I change that line to
object _smsCatcher;
then the lines below
this.AddMember(new NativeFunction("Start", (NativeCallback)Start));
this.AddMember(new NativeFunction("Stop", (NativeCallback)Stop));
gives the following error
Compiling syntax tree
SmsCatcher\SmsCatcher.uno(36.68): E2029: '<method_group>' has no defined cast to type Fuse.Scripting.NativeCallback
D:\PROJECTS\MOBILE\FUSE\HikerPlay\SmsCatcher\SmsCatcher.uno(36,69): Error E2029: '<method_group>' has no defined cast to type Fuse.Scripting.NativeCallbackSmsCatcher\SmsCatcher.uno(37.67): E2029: '<method_group>' has no defined cast to type Fuse.Scripting.NativeCallback
D:\PROJECTS\MOBILE\FUSE\HikerPlay\SmsCatcher\SmsCatcher.uno(37,68): Error E2029: '<method_group>' has no defined cast to type Fuse.Scripting.NativeCallback0.98 s
Here is the full source code
using Uno;
using Fuse;
using Uno.UX;
using Android;
using Fuse.Platform;
using Fuse.Reactive;
using Fuse.Scripting;
using Uno.Threading;
using Uno.Permissions;
using Uno.Compiler.ExportTargetInterop;
[extern(Android) ForeignInclude(Language.Java, "android.content.Intent")]
[extern(Android) ForeignInclude(Language.Java, "android.util.Log")]
[extern(Android) ForeignInclude(Language.Java, "com.goldenseed.smscatcher.*")]
[extern(Android) ForeignInclude(Language.Java, "com.fuse.Activity")]
[UXGlobalModule]
public class SmsCatcher : NativeEventEmitterModule
{
Java.Object _smsCatcher; // <====== PROBLEM LINE
static readonly SmsCatcher _instance;
static readonly string PLATFORM_NOT_SUPPORTED = "Non Android Platforms are not Supported";
public SmsCatcher() : base(true, "SMSRECEIVED", "SMSERROR", "PermissionReceived", "PermissionDenied")
{
if defined(Android)
{
Permissions.Request(Permissions.Android.INTERNET).Then(OnPermissionsPermitted,OnPermissionsRejected);
Permissions.Request(Permissions.Android.READ_SMS).Then(OnPermissionsPermitted,OnPermissionsRejected);
Permissions.Request(Permissions.Android.RECEIVE_SMS).Then(OnPermissionsPermitted,OnPermissionsRejected);
}
if (_instance != null) return;
_instance = this;
Uno.UX.Resource.SetGlobalKey(_instance, "SmsCatcher");
this.AddMember(new NativeFunction("Start", (NativeCallback)Start));// <====== PROBLEM LINE
this.AddMember(new NativeFunction("Stop", (NativeCallback)Stop));// <====== PROBLEM LINE
}
extern(Android) void Start(Fuse.Scripting.Context c, object[] args)
{
if (this._smsCatcher == null) {
this.Init();
}
if (args.Length > 0){
if (args[0] != null){
var phoneNumberFilter = (string)args[0];
this.SetPhoneNumberFilter(phoneNumberFilter);
}
if (args.Length > 1){
if (args[1] != null){
var regexFilter = (string)args[1];
this.SetRegexFilter(regexFilter);
}
}
}
this.StartSmsCatcher();
}
extern(!Android) void Start(Fuse.Scripting.Context c, object[] args)
{
debug_log PLATFORM_NOT_SUPPORTED;
this.Emit("SMSERROR", PLATFORM_NOT_SUPPORTED);
}
extern(Android) void Stop()
{
if (this._smsCatcher != null) {
this.StopSmsCatcher();
}
}
extern(!Android) void Stop()
{
debug_log PLATFORM_NOT_SUPPORTED;
this.Emit("SMSERROR", PLATFORM_NOT_SUPPORTED);
}
public void onSmsMessage(string smsMessage)
{
this.Emit("SMSRECEIVED", smsMessage);
}
extern(Android) void OnPermissionsPermitted(PlatformPermission p)
{
this.Emit("PermissionReceived", "Permissions allowed" + p);
}
extern(Android) void OnPermissionsRejected(Exception e)
{
this.Emit("PermissionDenied", "PermissionDenied "+ e);
}
[Foreign(Language.Java)]
extern(Android) void StartSmsCatcher()
@{
AndroidSmsCatcher smsCatcher = (AndroidSmsCatcher)@{SmsCatcher:Of(_this)._smsCatcher:Get()};
smsCatcher.onStart();
@}
[Foreign(Language.Java)]
extern(Android) void StopSmsCatcher()
@{
AndroidSmsCatcher smsCatcher = (AndroidSmsCatcher)@{SmsCatcher:Of(_this)._smsCatcher:Get()};
smsCatcher.onStop();
@}
[Foreign(Language.Java)]
extern(Android) void SetRegexFilter(string regexFiler)
@{
AndroidSmsCatcher smsCatcher = (AndroidSmsCatcher)@{SmsCatcher:Of(_this)._smsCatcher:Get()};
smsCatcher.setFilter(regexFiler);
@}
[Foreign(Language.Java)]
extern(Android) void SetPhoneNumberFilter(string phoneNumber)
@{
AndroidSmsCatcher smsCatcher = (AndroidSmsCatcher)@{SmsCatcher:Of(_this)._smsCatcher:Get()};
smsCatcher.setPhoneNumberFilter(phoneNumber);
@}
[Foreign(Language.Java)]
extern(Android) void Init()
@{
AndroidSmsCatcher smsCatcher = new AndroidSmsCatcher(Activity.getRootActivity(), new OnSmsCatchListener<String>() {
@Override
public void onSmsCatch(String message) {
@{SmsCatcher:Of(_this).onSmsMessage(string):Call(message)};
}
});
@{SmsCatcher:Of(_this)._smsCatcher:Set(smsCatcher)};
@}
}
The java source files are bundled with the project
I have tried uno clean
but no luck
What am I doing wrong? I have been on this for 2 days.
I am new to Fuse but experienced in C#;