我在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>
答案 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文件中的应用程序标记。