如何在PhoneGap的创建插件运行在后台的应用程序? [英] How to create plugin in phonegap to run the application in background?

查看:190
本文介绍了如何在PhoneGap的创建插件运行在后台的应用程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建插件的后台服务(运行在后台的应用程序)的PhoneGap的。

I have created plugin for background service (to run the application in background) in phonegap.

这里是我的Java code为插件:

here is my java code for plugin:

public class BackgroundService extends Plugin {
    @Override
    public PluginResult execute(String action, JSONArray args, String callbackId)
    {
        PluginResult.Status status = PluginResult.Status.OK;
        String result = "";

        try {
            if (action.equals("onCreate")) {
                this.onCreate();
            }
            else if (action.equals("onBind")) {
                Intent intent = null;
                this.onBind(intent);
            }
            else if (action.equals("onDestroy")) {
                this.onDestroy();
            }
            else if (action.equals("onStart")) {
                Intent intent = null;
                this.onStart(intent,args.getInt(1));
            }
            else if (action.equals("onUnbind")) {
                Intent intent = null;
                this.onUnbind(intent);
            }
            return new PluginResult(status, result);
        } catch(JSONException e) {
            return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
        }
    }
    public void onCreate() {

        // TODO Auto-generated method stub



        }
    public IBinder onBind(Intent intent) {

        // TODO Auto-generated method stub



        return null;

        }
    public void onDestroy() {

        // TODO Auto-generated method stub

        super.onDestroy();



        }
    public void onStart(Intent intent, int startId) {

        // TODO Auto-generated method stub

        //super.onStart(intent, startId);



        }
    public boolean onUnbind(Intent intent) {

        // TODO Auto-generated method stub



        }
    public void onPause()
    {
        super.webView.loadUrl("javascript:navigator.BackgroundService.onBackground();");
    }

    public void onResume()
    {
        super.webView.loadUrl("javascript:navigator.BackgroundService.onForeground();");
    }

}

和我的js文件是:

function BackgroundService() {
};

BackgroundService.prototype.create = function() {
    PhoneGap.exec(null, null, "BackgroundService", "onCreate", []);
};

BackgroundService.prototype.destroy = function() {
    PhoneGap.exec(null, null, "BackgroundService", "onDestroy", []);
};

BackgroundService.prototype.start = function(intent,startId) {
    PhoneGap.exec(null, null, "BackgroundService", "onStart", [intent,startId]);
};

BackgroundService.prototype.bind = function(intent) {
    PhoneGap.exec(null, null, "BackgroundService", "onBind", [intent]);
};

BackgroundService.prototype.unbind = function(intent) {
    PhoneGap.exec(null, null, "BackgroundService", "onUnbind", [intent]);
};
PhoneGap.addConstructor(function() {
    PhoneGap.addPlugin("BackgroundService", new BackgroundService());
});

在我的index.html。我已经加入了跌破code。在我的按钮,点击

and in my index.html. I have added the below code in my button click

navigator.BackgroundService.onCreate();  navigator.BackgroundService.onStart(意向,1);

navigator.BackgroundService.onCreate(); navigator.BackgroundService.onStart(intent,1);

我的错误是:

ERROR/AndroidRuntime(14981): FATAL EXCEPTION: main

ERROR/AndroidRuntime(14981): java.lang.RuntimeException: Unable to instantiate service com.app.newly.BackgroundService: java.lang.ClassCastException: com.app.newly.BackgroundService

ERROR/AndroidRuntime(14981):at android.app.ActivityThread.handleCreateService(ActivityThread.java:2943)

ERROR/AndroidRuntime(14981):at android.app.ActivityThread.access$3300(ActivityThread.java:125)

ERROR/AndroidRuntime(14981):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2087)
ERROR/AndroidRuntime(14981):     at android.os.Handler.dispatchMessage(Handler.java:99)

ERROR/AndroidRuntime(14981):     at android.os.Looper.loop(Looper.java:123)

ERROR/AndroidRuntime(14981):     at android.app.ActivityThread.main(ActivityThread.java:4627)
ERROR/AndroidRuntime(14981):     at java.lang.reflect.Method.invokeNative(Native Method)

ERROR/AndroidRuntime(14981):     at java.lang.reflect.Method.invoke(Method.java:521)

ERROR/AndroidRuntime(14981):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

ERROR/AndroidRuntime(14981):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(14981):     at dalvik.system.NativeStart.main(Native Method)
ERROR/AndroidRuntime(14981): Caused by: java.lang.ClassCastException: com.app.newly.BackgroundService
ERROR/AndroidRuntime(14981):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2940)
ERROR/AndroidRuntime(14981):     ... 10 more

如果我删除 startService(新意图(这一点,MyService.class)); 从Java文件中,我得到了以下错误:

If I removed startService(new Intent(this,MyService.class)); from java file I got the below error:

ERROR/Web Console(4785): ReferenceError: Can't find variable: SqlitePlugin at file:///android_asset/www/BackgroundService.js:31
ERROR/Web Console(4785): TypeError: Result of expression 'window.plugins.SqlitePlugin' [undefined] is not an object. at file:///android_asset/www/index.html:26

否则我无法运行我收到错误在java file.Am得到红十字标志(如 X )在这一行'的左上角的应用startService(新意图(这一点,MyService.class));请告诉我,我错了,请指引我,在此先感谢。

otherwise I can't able to run the application I am getting the error in the java file.Am getting the red cross mark(like 'X') in the left corner of this line 'startService(new Intent(this,MyService.class));' please tell me where I am wrong,please guide me,thanks in advance.

 我正在启动中的错误service.when我将光标移动到startService我收到创建方法startService(意向)

I am getting the error in start service.when i move the cursor to the startService i am getting create method 'startService(intent)'

和我有这个插件的疑问我可以能够在背景或not.If有可能怎么走background.please警报告诉我,我错了,请指引我运行的JavaScript,在感谢前进。

And I Am having the doubt in this plugin can i able to run the javascript in background or not.If it is possible how to get the alert in background.please tell me where I am wrong,please guide me,thanks in advance.

推荐答案

创建插件是fine.You创建的服务,就像一个普通的Java文件。 然后当你调用这个插件。你刚开始你的服务就像

Creation of plugin is fine.You create your service just like a normal java file. And then As soon as you call this plugin . you just start your service like

startService(new Intent(this, MyService.class));

那么你的服务将在background.This运行一个简单的方法来做到。

Then your service will run in background.This is an easy way to do.

如果单独创建的服务,然后

If separately you create service then

您的插件应该是这样的。

public class BackgroundService extends Plugin {

private static final String TAG = "BackgroundService";
private static final String CALL_SERVICE_ACTION = "callService";

@Override
public PluginResult execute(String action, JSONArray args, String callbackId)
{
    Log.i(TAG, "Plugin Called");
PluginResult result = null;

if (CALL_SERVICE_ACTION.equals(action)) {
    Log.d(TAG, "CALL_SERVICE_ACTION");
    startService(new Intent(ctx, MyService.class));
}

else {
    result = new PluginResult(Status.INVALID_ACTION);
    Log.d(TAG, "Invalid action : " + action + " passed");
}

return result;
}
}

您的的.js 文件应该是这样的。

Your .js file should look like this

function BackgroundService() {
};

BackgroundService.prototype.callService = function(successCallback, failCallback) {

return PhoneGap.exec(successCallback, failCallback, "BackgroundService",
    "callService", [ null ]);
};

PhoneGap.addConstructor(function() {
PhoneGap.addPlugin("BackgroundService", new BackgroundService());
});

和您的 HTML 文件应该是这样的。

And your HTML file should look like this

function callServiceFunction() {
window.plugins.BackgroundService.callService('callService',
        callServiceSuccessCallBack, callServiceFailCallBack);

}
function callServiceSuccessCallBack(e) {
alert("Success");
}

function callServiceFailCallBack(f) {
alert("Failure");
}

此外,您需要注册您的PhoneGap插件,在您的RES / XML / plugins.xml像

Also you need to register your phonegap plugin in your res/xml/plugins.xml like

<plugin name="BackgroundService" value="package-structure.BackgroundService"/>

这篇关于如何在PhoneGap的创建插件运行在后台的应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆