我正在尝试使用codenameone更改Android手机上的屏幕保护程序,所以为此,我使用的是原生界面进程,
然后我创建了我的主类,然后创建了继承自NativeInterface的“MyNativeContent”,
这里是内容: 包com.faugan.addscreen;
import com.codename1.system.NativeInterface;
/**
*
* @author ccpita
*/
public interface MyNativeContent extends NativeInterface{
public void testAndroidNatif();
}
现在我右键单击我的界面以生成所有平台的本机访问权限,
然后我从我的android目录打开MyNativeContentImpl.java并在里面执行此操作:
package com.faugan.addscreen;
public class MyNativeContentImpl {
public void testAndroidNatif() {
// code for screensaver on android
}
public boolean isSupported() {
return true;
}
}
现在当我编译它时,它失败了,我遇到了这个错误:
抛出java.lang.ClassNotFoundException: com.faugan.addscreen.MyNativeContentImpl at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.ClassLoader.findSystemClass(ClassLoader.java:1001) 在com.codename1.impl.javase.ClassPathLoader.findClass(ClassPathLoader.java:100) 在com.codename1.impl.javase.ClassPathLoader.loadClass(ClassPathLoader.java:50) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) 在com.codename1.system.NativeLookup.create(NativeLookup.java:81) 在com.faugan.addscreen.MyApplication.lambda $ start $ 0(MyApplication.java:47) 在com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349) 在com.codename1.ui.Component.pointerReleased(Component.java:3260) 在com.codename1.ui.Form.pointerReleased(Form.java:2651) at com.codename1.ui.Component.pointerReleased(Component.java:3239)渲染帧花了太长时间722毫秒 在com.codename1.ui.Display.handleEvent(Display.java:2025) 在com.codename1.ui.Display.edtLoopImpl(Display.java:1070) 在com.codename1.ui.Display.mainEDTLoop(Display.java:999) 在com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 显示java.lang.NullPointerException 在com.faugan.addscreen.MyApplication.lambda $ start $ 0(MyApplication.java:48) 在com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349) 在com.codename1.ui.Component.pointerReleased(Component.java:3260) 在com.codename1.ui.Form.pointerReleased(Form.java:2651) 在com.codename1.ui.Component.pointerReleased(Component.java:3239) 在com.codename1.ui.Display.handleEvent(Display.java:2025) 在com.codename1.ui.Display.edtLoopImpl(Display.java:1070) 在com.codename1.ui.Display.mainEDTLoop(Display.java:999) 在com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
现在我的问题是:
1)我有这些错误的时候?是因为这是在模拟器中运行的吗?
2)你能告诉我在testAndroidNatif()
方法中添加什么来改变Android手机上的屏幕保护程序吗?
谢谢
答案 0 :(得分:1)
首先应创建扩展b = Company.find(2) // Company-B
b.update(company_assets_attributes: [{info: 'abc', asset_attributes: {label: 'Asset A'}}])
的{{1}}界面,然后右键单击该界面并选择生成原生访问。
切换到“文件”标签,然后展开文件夹MyNativeContent
- > NativeInterface
- > native
- > android
- > com
。然后打开faugan
文件,这是添加所有Android原生代码的地方。
您可以在此文件夹中添加更多Android文件,并在addscreen
文件中引用它们。请务必使用MyNativeContentImpl.java
的{{1}}方法返回true。
关于您的第二个问题,这是Android特定的,您必须自己做,或者在StackOverflow上使用MyNativeContentImpl.java
和isSupported()
标记或在MyNativeContentImpl
上搜索。例如,在SO上查看这个问题...... android-screen-saver-sample-code