Ionic 这是覆盖信标解析的正确方法吗?

j1dl9f46  于 2023-03-16  发布在  Ionic
关注(0)|答案(1)|浏览(119)

我正在尝试开发一个简单的应用程序来检测beacon使用电容器集成离子框架,并运行到android平台。我已经做了所有的委托在homepage.ts和权限像往常一样(从官方文档和github的例子)。现在所有剩下的是设置新的beacon解析为ibeacon(默认为altbeacon)。当我运行的应用程序,它崩溃了。
这是我到目前为止所尝试的(注意,我不擅长Java)这是从我的MainActivity.java文件调用解析文件

import android.os.RemoteException;

public class MainActivity extends BridgeActivity {
    private Parsing myParsing;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Parsing myParsing = new Parsing();
        myParsing.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

这是我的Parsing.java文件

package io.ionic.starter;

import com.getcapacitor.BridgeActivity;
import org.altbeacon.beacon.Beacon;
import org.altbeacon.beacon.BeaconConsumer;
import org.altbeacon.beacon.RangeNotifier;
import org.altbeacon.beacon.Region;
import org.altbeacon.beacon.BeaconManager;
import org.altbeacon.beacon.BeaconParser;
import org.altbeacon.beacon.Identifier;

import java.util.Collection;

import android.os.Bundle;
import android.util.Log;
import android.os.RemoteException;
//m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24 ibeacon

public class Parsing extends BridgeActivity implements BeaconConsumer{

    protected static final String TAG = "RangingActivity";
    BeaconManager beaconManager;
    Identifier uuidb =Identifier.parse("sumthing");
    int major=sumthing;
    int minor=sumthing;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
        beaconManager.bind(this);    
    }

    @Override
    public void onBeaconServiceConnect() {
        Region region = new Region("beaconTest",uuidb, Identifier.fromInt(major), Identifier.fromInt(minor));
        try {
            beaconManager.startMonitoringBeaconsInRegion(region);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

运行应用程序时崩溃,并显示您的Activity尚未附加到应用程序示例。您无法在onCreate调用之前请求ViewModel。
如果我只在主活动中进行解析,它将抛出一些关于不能覆盖抽象方法的信息。
任何帮助都将不胜感激
这是离子信息

Ionic:

   Ionic CLI                     : 6.20.8 (C:\Users\User\AppData\Roaming\npm\node_modules\@ionic\cli)
   Ionic Framework               : @ionic/angular 6.5.6
   @angular-devkit/build-angular : 15.2.0
   @angular-devkit/schematics    : 15.2.0
   @angular/cli                  : 15.2.0
   @ionic/angular-toolkit        : 6.1.0

Capacitor:

   Capacitor CLI      : 4.7.0
   @capacitor/android : 4.7.0
   @capacitor/core    : 4.7.0
   @capacitor/ios     : not installed

Utility:

   cordova-res : 0.15.4
   native-run  : 1.7.1

System:

   NodeJS : v18.14.0 (C:\Program Files\nodejs\node.exe)
   npm    : 6.14.13
   OS     : Windows 10
von4xj4u

von4xj4u1#

添加Parsing类会带来问题--在Android上,如果不向操作系统注册Activity示例,您无法随时创建新的Activity示例。

public class MainActivity extends BridgeActivity implements MonitorNotifer {
    BeaconManager beaconManager;
    Identifier uuidb =Identifier.parse("sumthing");
    int major=sumthing;
    int minor=sumthing;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
        Region region = new Region("beaconTest",uuidb, Identifier.fromInt(major), Identifier.fromInt(minor));
        beaconManager.startMonitoringBeacons(region);
        beaconManager.addMonitorNotifer(this);
    }
    @Override
    public void didEnterRegion(Region arg0) {
        Log.d(TAG, "did enter region.");
    }

    @Override
    public void didExitRegion(Region region) {
        Log.d(TAG, "did exit region.");
    }

    @Override
    public void didDetermineStateForRegion(int state, Region region) {
        Log.d(TAG, "did determine state for region: "+state);
    }
}

请确保此MainAcitity已在你的应用中正确注册,以便由Ionic使用。如果未激活此Activity,则不会执行此代码。
上面的代码显示了更简单的Autobind APIs in the Android Beacon Library,不需要调用bind(this)。Android Beacon Library 2.19+支持这些API。请确保您拥有该库版本或更高版本--如果您使用的是使用旧版Android Beacon Library的旧版Ionic或Cordova插件,则可能无法正常工作。

相关问题