我正在开发一个混合的Phonegap应用程序,针对Android平台。该应用只使用了一个插件,而我也在同时开发该插件。这个插件具有三个功能:
我曾经担心实现设备重启时应用程序会出现问题,但是通过在其他SO线程中找到的信息,实现起来非常容易。
package com.example.plugin;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaWebView;
import android.content.Context;
import android.content.BroadcastReceiver;
import android.content.pm.PackageManager;
import android.app.Activity;
import android.content.Intent;
public class Rebooter extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent i = new Intent(context, MyAppCordovaPlugin.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
我注册了重启接收器,如下所示:
<receiver android:enabled="true" android:name=".Rebooter"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
MyAppCordovaPlugin
是我的应用程序/插件的入口点 - 它扩展了CordovaPlugin
类。 这是我在那里做的
public class MyAppCordovaPlugin extends CordovaPlugin
{
private Context context;
public void initialize(CordovaInterface cordova, CordovaWebView webView)
{
super.initialize(cordova, webView);
this.context = cordova.getActivity().getApplicationContext();
//setup pushy.me broadcast receiver
//setup geolocation changes receiver
//setup broadcast receiver for a half-hourly alarm
}
@Override
public void onResume(boolean multitasking)
{
super.onResume(multitasking);
//unregister background location change receiver, if present
//switch geolocation to foreground mode. i.e. using
//FusedLocationApi.requestLocationUpdates
}
@Override
public void onPause(boolean multitasking)
{
super.onPause(multitasking);
//stop request for foreground location updates, if present
//switch geolocation to background mode, i.e by
//registering a broadcast receiver that listens for location change
//broadcasts
}
当我手动在我的Android 4.4.2测试设备上启动应用程序时,一切正常。例如:
- 地理位置更改被检测到:无论是在前台还是在后台
- 推送消息被接收。 再次在前/后台都可以
- 半小时的闹钟起作用
当我检查正在运行的应用程序时,我发现它由一个服务 PushySocketService
和主进程 com.example.app
组成,标记为正在使用中。内存使用量相当可观。
当我重新启动手机时,我仍然会发现相同的服务和“主进程”正在运行。但是,对于主进程报告的内存使用情况要低得多。
最重要的是 - 应用程序无法接收推送消息并且不响应地理位置更改。这只有在我通过 main activity
启动应用程序之后才开始发生。
我肯定遗漏了什么 - 所以重新启动的应用程序不会自动启动其 main activity
吗?如果是这样,那么我的 Rebooter.onReceive
代码肯定有问题?
为了完整起见,我应该提到:
- 插件.xml文件中仅静态声明了Pushy.me和Rebooter广播接收器。地理位置和闹钟广播接收器是从我的插件代码中动态注册的。
- 我正在使用Phonegap CLI v6.4.2和JDK 7构建应用程序
显然我在这里做错了什么,非常感谢任何能够指导我正确方向的人。
BroadcastReceiver.OnReceive
事件是重新启动活动的逻辑位置。你似乎在建议其他事情。 - DroidOS