Codenameone cn1中启动时自动运行的本机接口

Codenameone cn1中启动时自动运行的本机接口,codenameone,Codenameone,我不太清楚如何通过本机接口在cn1中实现本机android代码,尽管我已经成功地完成了一些工作。下面是本机android代码和我在cn1本机界面中的一次尝试。我有几个问题: 1) 如何调用nativeImpl类中的类?例如:我在项目的native/android文件夹中创建了YourActivityRunStart类。在nativeImpl类中如何调用它?清单中的接收方存在此类未找到异常 2) BroadcastReceiver的onReceive方法中包含MainActivity.class,

我不太清楚如何通过本机接口在cn1中实现本机android代码,尽管我已经成功地完成了一些工作。下面是本机android代码和我在cn1本机界面中的一次尝试。我有几个问题:

1) 如何调用nativeImpl类中的类?例如:我在项目的native/android文件夹中创建了YourActivityRunStart类。在nativeImpl类中如何调用它?清单中的接收方存在此类未找到异常

2) BroadcastReceiver的onReceive方法中包含MainActivity.class,因此每次设备启动时,它都会在本机android中运行MainActivity类。如何通过本机接口调用其中cn1的特定表单或类

本机android代码:

**MainActivity**
public class MainActivity extends AppCompatActivity{

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

        Log.e("bootDeviceValue", " aaaaa");
    }
}

**YourActivityRunOnStartup class**
public class YourActivityRunOnStartup extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Log.e("bootDeviceValue", " bbbbb");
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}
我在cn1中尝试的内容:

尝试1:YourActivityRunStart类在本机/android文件夹中

public class YourActivityRunOnStartup extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Log.e("bootDeviceValue", " bbbbb");
            Intent i = new Intent(context, null);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}
生成提示:

1)android.xapplication: <receiver   android:enabled="true"   android:exported="true"   android:name=".YourActivityRunOnStartup"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter>  </receiver>

2)android.xpermissions:  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Nokia.class

public void start() {
    if (current != null) {
        current.show();
        return;
    }
    na = (Native) NativeLookup.create(Native.class);
    if (na != null && na.isSupported()) {
        **// what to do here??? . . . . . . . . . . . . . . . . . .** 
    }
    new Home(theme).show();
}
调试时出错:

09-04 14:28:00.805 26852-26852/com.zzzz.nokiaApp E/AndroidRuntime: FATAL EXCEPTION: main
 Process: com.zzzz.nokiaApp, PID: 26852
 java.lang.RuntimeException: Unable to instantiate receiver com.zzzz.nokiaApp.YourActivityRunOnStartup: java.lang.ClassNotFoundException: Didn't find class "com.zzzz.nokiaApp.YourActivityRunOnStartup" on path: DexPathList[[zip file "/data/app/com.zzzz.nokiaApp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.zzzz.nokiaApp-1/lib/arm, /vendor/lib, /system/lib]]
     at android.app.ActivityThread.handleReceiver(ActivityThread.java:3682)
     at android.app.ActivityThread.access$2000(ActivityThread.java:230)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1904)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:148)
     at android.app.ActivityThread.main(ActivityThread.java:7409)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
  Caused by: java.lang.ClassNotFoundException: Didn't find class "com.zzzz.nokiaApp.YourActivityRunOnStartup" on path: DexPathList[[zip file "/data/app/com.zzzz.nokiaApp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.zzzz.nokiaApp-1/lib/arm, /vendor/lib, /system/lib]]
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
     at android.app.ActivityThread.handleReceiver(ActivityThread.java:3677)
     at android.app.ActivityThread.access$2000(ActivityThread.java:230) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1904) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:7409) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
    Suppressed: java.lang.ClassNotFoundException: com.zzzz.nokiaApp.YourActivityRunOnStartup
     at java.lang.Class.classForName(Native Method)
     at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
     at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 10 more
  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

新错误日志:

09-07 11:54:05.462 8116-8116/com.thecapitaleyenepal.nokiaApp D/AndroidRuntime: Shutting down VM
09-07 11:54:05.462 8116-8116/com.thecapitaleyenepal.nokiaApp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.thecapitaleyenepal.nokiaApp, PID: 8116
java.lang.RuntimeException: Unable to start receiver com.thecapitaleyenepal.nokiaApp.YourActivityRunOnStartup: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.thecapitaleyenepal.nokiaApp/com.thecapitaleyenepal.nokiaApp.Nokia}; have you declared this activity in your AndroidManifest.xml?
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3708)
at android.app.ActivityThread.access$2000(ActivityThread.java:230)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1904)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7409)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.thecapitaleyenepal.nokiaApp/com.thecapitaleyenepal.nokiaApp.Nokia}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1855)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1546)
at android.app.ContextImpl.startActivity(ContextImpl.java:752)
at android.app.ContextImpl.startActivity(ContextImpl.java:734)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:345)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:345)
at com.thecapitaleyenepal.nokiaApp.YourActivityRunOnStartup.onReceive(YourActivityRunOnStartup.java:25)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3701)
at android.app.ActivityThread.access$2000(ActivityThread.java:230) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1904) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:7409) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
09-07 11:54:45.302 8116-8116/com.thecapitaleyenepal.nokiaApp I/Process: Sending signal. PID: 8116 SIG: 9
AndroidManifest:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:enabled="true"
        android:exported="true"
        android:name=".YourActivityRunOnStartup">

        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>

    </receiver>
</application>



请注意,在构建提示中,您包含了需要更新的字符串,如
YourActivityRunStart
等。请确保它们指向正确的包/类名。

我没有理解。我在这个项目中的包名是“com.zzzz.nokiaApp”。我在native>android文件夹中创建了YourActivityRunStart类。我需要通过android.xapplication在构建提示中调用这个类。1) 如何指向正确的包和类?我遇到的错误是“无法实例化receiver com.zzzz.nokiaApp.YourActivityRunStart:java.lang.ClassNotFoundException。”2)我的第二个问题是我需要通过本机接口类(NativeImpl.class)调用cn1的表单或类。我该怎么做?你的ActivityRunStartup在
com.zzzz.nokiaApp
中吗?是的,你的ActivityRunStartup在com.zzzzzz.nokiaApp中。请看上面的屏幕截图。(另外,我已经在软件包名称中将CapitaleyeNepal手动替换为zzzz)。也许你们会感到困惑,因为我有一个类似包名的问题,但它们是两个不同的项目,有不同的包名。是什么原因让您对包名如此困惑?问题中有什么错误吗?您缺少
YourActivityRunStart
中的
package
语句,这就是我提问的原因。它是否存在并且定义正确?如果没有,将其放入正确的目录hierarchyohh也没关系,我忘了在类中添加包名。。很抱歉broadCastListener的onReceive中有“Intent i=new Intent(context,MainActivity.class);”,它在启动时运行MainActivity类。我在cn1中使用init()、start()等将nokia类作为主类。现在这里是“Intent I=new Intent(context,nokia.class);”,这会给出错误。请查看问题末尾的新错误日志。
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:enabled="true"
        android:exported="true"
        android:name=".YourActivityRunOnStartup">

        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>

    </receiver>
</application>