如何在Android中使用cordova制作基本的应用类

时间:2014-03-31 12:19:15

标签: java android cordova

我在cordova中有一项活动(见下文),这是我创建项目时生成的。但是现在我需要创建一个扩展应用程序而不是CordovaActivity的java类。这就是我得到的:

package com.guessSound.guessSound;

import android.os.Bundle;
import org.apache.cordova.*;
// import com.parse.*;
// import com.parse.Parse;
// import com.parse.ParseAnalytics;
// import com.parse.ParseInstallation;
// import com.parse.PushService;

public class GuessThisSound extends CordovaActivity {

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.init();

        // // Set by <content src="index.html" /> in config.xml
        super.setIntegerProperty("splashscreen", R.drawable.splash);
        super.loadUrl(Config.getStartUrl(),3000);

        //super.loadUrl("file:///android_asset/www/index.html")
    }
}

我想创建一个新类,它是一个类似下面的应用程序

package com.guessSound.guessSound;

import android.os.Bundle;
import org.apache.cordova.*;
// import com.parse.*;
import com.parse.Parse;
import com.parse.ParseAnalytics;
import com.parse.ParseInstallation;
import com.parse.PushService;

public class MainApplication extends Application {
    private static MainApplication instance = new MainApplication();

    public MainApplication() {
        instance = this;
    }

    public static Context getContext() {
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
      Parse.initialize(this, "xx", "xx");
      PushService.setDefaultPushCallback(this, GuessThisSound.class);
      PushService.subscribe(this, "Broadcast", GuessThisSound.class);
      ParseInstallation.getCurrentInstallation().saveInBackground();
    }
}

但是当我构建应用程序时,我收到了应用程序和上下文的“找不到符号”。我试图通过编写import android.Context来导入Application和Context(对于Application来说也一样。所以我想我需要使用某种CordovaApplication,因为我使用CordovaActivity扩展了第一个类而不仅仅是Activity。

我的androidManifest看起来像这样:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="4" android:versionName="1.3.0" android:windowSoftInputMode="adjustPan" package="com.guessSound.guessSound" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
    <application android:debuggable="false" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:name="com.guessSound.guessSound.MainApplication">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="com.guessSound.guessSound.GuessThisSound" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name="com.parse.PushService" />
        <receiver android:name="com.parse.ParseBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
    </application>
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="com.android.vending.BILLING" />
</manifest>

1 个答案:

答案 0 :(得分:0)

我一直面临着类似的问题 - 也尝试创建一个Application类,以便让Parse Push Notifications不会因我的Cordova项目而崩溃。

简答:
在MainApplication文件中,您需要添加导入
import android.app.Application;

import android.content.Context

更广泛的问答:
我们试图解决的更大问题是在Android上使用Cordova的Parse Push Notif时解决以下错误:java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library

稍微简洁的回答(在https://parse.com/questions/android-push-notification-error-msg提供)说我们应该“创建一个Application类并在AndroidManifest.xml中注册它。如果你将Parse.initialize移动到它的onCreate方法,你的程序将始终在服务开始之前调用Parse.initialize。“
这就是那些对本机Android开发有限的手机开发人员(比如我)的问题,他们想知道这是什么意思。

你的实施是我见过的最接近的 另一个有效的可以在
找到 https://groups.google.com/forum/#!searchin/parse-developers/You $ 20must $ 20call $ 20Parse.initialize(context $ 2C $ 20applicationId $ 2C $ 20clientKey)20美元20美元前20美元$ 20Parse $ 20library / parse-developers / AU31WlFG5yw / 887uFopyOZAJ

可以在此处找到有关Android应用程序类的详细说明:
http://www.intertech.com/Blog/androids-application-class/

请注意,我认为您不需要getContext方法;因此,您的应用程序类似乎可以简化为:

package com.guessSound.guessSound;

import android.app.Application;
import org.apache.cordova.*;
import com.parse.Parse;
import com.parse.ParseAnalytics;
import com.parse.ParseInstallation;
import com.parse.PushService;

public class MainApplication extends Application {

    @Override
    public void onCreate() {
      super.onCreate();
      Parse.initialize(this, "xx", "xx");
      PushService.setDefaultPushCallback(this, GuessThisSound.class);
      PushService.subscribe(this, "Broadcast", GuessThisSound.class);
      ParseInstallation.getCurrentInstallation().saveInBackground();
    }
}


要使其正常工作,另一个重要的部分(您已经完成)是将android:name="com.guessSound.guessSound.MainApplication"添加到AndroidManifest.xml文件中的应用程序标记。