我正在尝试创建一个Cordova插件可以在后台运行的服务。首先,我创建了一个扩展IntentService的服务:
public class BackgroundService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
Log.d(LOG_PREFIX, "handling an intent " + intent.toString());
this.runBackgroundService();
}
public static Intent getServiceIntent(Context context){
Intent intent = new Intent();
intent.setClass(context, BackgroundService.class);
return intent;
}
}
然后在我的plugin.xml文件中,我需要在清单中声明服务:
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<service
android:name="com.myapp.BackgroundService"
android:exported="false">
</service>
</config-file>
最后,在插件中,我通过获取Intent并调用startService来激活后台服务:
public class PluginMain extends CordovaPlugin{
public void initialize(CordovaInterface cordova, CordovaWebView webview){
super.initialize(cordova, webview);
Intent backgroundIntent = BackgroundService.getServiceIntent(cordova.getActivity().getApplicationContext());
cordova.getActivity().startService(backgroundIntent);
}
问题是startService调用失败,说它无法找到BackgroundService类,或者它在清单中未声明。奇怪的是它将一些离子字符串添加到类名的前面:
无法找到显式活动类{com.ionicframework.project165251 / com.myapp.BackgroundService};
但是,如果我尝试使用该显式类(使用com.ionicframework.project165251 /前缀),它会拒绝它,说清单文件中的斜杠无效。我不知道该做什么......