choys
choys
  • 发布:2014-09-24 22:59
  • 更新:2017-09-01 17:27
  • 阅读:26178

调用Native.js,如何启动一个service?

分类:Native.js

我现在需要启动一个后台服务,js调用如下:

var mainActivity = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var ServiceDemo = plus.android.importClass("x.service.ServiceDemo"); //自己实现的service
var i = new Intent(mainActivity,ServiceDemo.class);
mainActivity.startService(i);

这样写是否有问题?还是通过js无法做到启动一个service?

2014-09-24 22:59 负责人:无 分享
已邀请:

最佳回复

Android_磊子

Android_磊子

先这样处理吧。

var main = plus.android.runtimeMainActivity();  
var Intent = plus.android.importClass('android.content.Intent');  
var intent = new Intent();  
intent.setClassName(main, "io.dcloud.test.MyService");  
main.startService(intent);

抱歉MyService.class这种方式调用,处理的还不够好。
同时添加的自定义类只能离线打包,并且不要混淆此类。

  • 无心浪子

    请问这是集成h5+的sdk还是用hbuilder呢?

    2015-12-09 17:24

  • Android_磊子

    这是NJS调用原生自定义Service

    2015-12-10 18:02

  • 无所不帅

    请问这个service,是在那里写的?就是说我要在这个service中执行一些业务代码,应该在哪里写?是使用android,写好我要在service中执行一些业务代码,然后再njs调用。还是我调用service后,让我在hbuilder中写的代码,,放到service中去执行?

    2017-03-22 14:35

  • 无所不帅

    intent.setClassName(main, "io.dcloud.test.MyService"); io.dcloud.test.MyService是从哪里来的,这个io.dcloud.test.MyService,应该在哪里编写。

    2017-03-22 14:36

  • 4***@qq.com

    解决了吗?

    2017-10-09 10:57

  • 4***@qq.com

    回复 无所不帅:解决了没,qq413408219

    2017-10-09 10:57

  • 微图科技

    回复 无所不帅: 老哥,这个问题解决了吗,我也遇到同样的问题了

    2019-09-23 20:58

小溪幽泉

小溪幽泉

用NJS就行。方法: js方法如下:
var mainAct = plus.android.newObject("com.iwork.activity.MainAct"); //类的全路径
plus.android.invoke(mainAct,"getInfo"); //getInfo 方法名

这样就能进入方法中,然后再android那边的java方法写启动service即可,注意android那边要把当前的activity弄成静态的,也就是在oncreat中写一个 context=this,定义一个全局静态变量 private static MainAct context;

启动的时候用
Intent intent = new Intent(context, MessageService.class);
context.startService(intent);

这样就行了

  • seniafamily

    按照这种方法进入activity后不经过oncreat,而且报错:

    05-30 15:03:33.175: E/InvProxy(24045): NativeObject.execMethod getInfo method ; params=[]java.lang.reflect.InvocationTargetException

    2016-05-30 15:12

JBoss

JBoss

真的可以吗?我为什么没有调用出来呢?有谁能提供一个例子吗?

var mainAct = plus.android.newObject("com.iwork.activity.MainAct");
好像不会调用Activity的oncreate方法啊,所以
plus.android.invoke(mainAct,"getInfo"); //getInfo 方法名
调用时,报了
07-25 23:31:05.675: W/System.err(2063): java.lang.NullPointerException
07-25 23:31:05.675: W/System.err(2063): at android.content.ComponentName.<init>(ComponentName.java:77)
07-25 23:31:05.675: W/System.err(2063): at android.content.Intent.<init>(Intent.java:3843)

  • 小郭哥

    你好,后来你调试成功了吗?

    2016-01-16 15:12

  • seniafamily

    遇到了同样的问题,请问解决了吗?

    2016-05-30 10:49

MrLeo

MrLeo

我能问你们的这个java文件放到那

  • Android_磊子

    只能离线打包,进行放置,同时不要混淆此类。

    2016-05-25 12:10

  • x***@163.com

    回复 Android_磊子:我能问下,怎么离线打包吗?离线打包是指用他的HBuilder-Hello工程来手动打包吗?

    2017-11-09 10:04

1***@qq.com
hanbin655

hanbin655

调用ACtivity
var activity = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent(activity.getIntent());
intent.setClassName(activity, "com.HBuilder.integrate.SDK_WebApp");
activity.startActivity(intent);

感谢DCloud_SDK_骁骑 指导

  • 3***@qq.com

    这样是启动service了?那我需要再service里执行的操作写在哪里?比如连接服务器?

    2017-02-17 13:49

  • 无所不帅

    我也想知道、、、

    2017-03-14 11:16

  • 逞英雄

    这种方法不稳定吧? 我有时候能打开有什么打不开

    2019-04-24 12:58

YIloneliness

YIloneliness

厉害了

该问题目前已经被锁定, 无法添加新回复