簡體   English   中英

如何在Android中使用Cordova制作基本的應用程序類

[英]how to make a basic app class with cordova in Android

我在創建項目時在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>

我一直在遇到類似的問題-也在嘗試創建Application類以獲取Parse Push Notifications而不使我的Cordova項目崩潰。

簡短答案:
在您的MainApplication文件中,您需要添加一個導入
import android.app.Application;

import android.content.Context

更廣泛的問答:
我們正試圖解決的更大問題是在Android上將Cordse Parse Not Notifs與Cordova一起使用時解決以下錯誤: java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library 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開發(例如我)的接觸有限的phonegap開發人員想知道這是什么意思。

您的實現是我所見過的最接近的實現。
可以在找到另一個有效的
https://groups.google.com/forum/#!searchin/parse-developers/您 $ 20must $ 20call $ 20Parse.initialize(context $ 2C $ 20applicationId $ 2C $ 20clientKey)$ 20before $ 20使用$ 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文件中的application標記中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM