[英]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.