java - 如何在 Android 中使用 cordova 创建一个基本的应用程序类

标签 java android cordova

我在 cordova 中有一个 Activity (见下文),它是在我创建项目时生成的。但是现在我需要创建一个扩展应用程序而不是 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>

最佳答案

我一直面临类似的问题 - 还尝试创建一个 Application 类以使 Parse Push Notifications 不会与我的 Cordova 项目崩溃。

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

导入 android.content.Context

更广泛的问答:
我们试图解决的更大问题是解决在 Android 上将 Parse Push Notifs 与 Cordova 结合使用时出现的以下错误:java.lang.RuntimeException:applicationContext 为 null。在使用 Parse 库之前,您必须调用 Parse.initialize(context, applicationId, clientKey)

有点简洁的答案(在 https://parse.com/questions/android-push-notification-error-msg 中提供)说我们应该“创建一个应用程序类并将其注册到您的 AndroidManifest.xml 中。如果您将 Parse.initialize 移动到它的 onCreate 方法中,您的程序将始终调用 Parse .在服务启动前初始化。”
这就是对原生 Android 开发接触有限的 phonegap 开发者(比如我)想知道这是什么意思的地方。

你的实现是我见过的最接近的。
另一个有效的可以在
找到 https://groups.google.com/forum/#!searchin/parse-developers/You $20must$20call$20Parse.initialize(context$2C$20applicationId$2C$20clientKey)$20before$20using$20the$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 文件中的应用程序标签。

关于java - 如何在 Android 中使用 cordova 创建一个基本的应用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761379/

相关文章:

javascript - 如果我使用 jquery mobile 提交表单,页面会变形

java - containarized shinyproxy 非常慢

java - Egit 工作目录与 Eclipse 中的项目

Java 架构 - 关于 ActionListener 约定的问题

java - 我无法输入字母,无法输入数字

android - RxJava中的特殊注释

javascript - @JavaScriptInterface 与 ICS 和 JB 项目一起工作

安卓游戏滚动背景

android - Angularjs 抛出 "Unexpected strict mode reserved word"导致应用程序崩溃

javascript - 无法在 jquery 中捕获单选按钮组更改事件