|
|
@@ -0,0 +1,678 @@
|
|
|
+package com.usai.redant.rautils;
|
|
|
+
|
|
|
+import android.Manifest;
|
|
|
+import android.app.AlarmManager;
|
|
|
+import android.app.Application;
|
|
|
+import android.app.Notification;
|
|
|
+import android.app.NotificationManager;
|
|
|
+import android.app.PendingIntent;
|
|
|
+import android.content.BroadcastReceiver;
|
|
|
+import android.content.Context;
|
|
|
+import android.content.Intent;
|
|
|
+import android.content.IntentFilter;
|
|
|
+import android.content.SharedPreferences;
|
|
|
+import android.content.pm.PackageManager;
|
|
|
+import android.location.Location;
|
|
|
+import android.location.LocationListener;
|
|
|
+import android.location.LocationManager;
|
|
|
+import android.net.ConnectivityManager;
|
|
|
+import android.net.NetworkInfo;
|
|
|
+import android.os.AsyncTask;
|
|
|
+import android.os.Bundle;
|
|
|
+import android.os.SystemClock;
|
|
|
+import android.support.v4.app.ActivityCompat;
|
|
|
+import android.text.TextUtils;
|
|
|
+import android.util.Log;
|
|
|
+
|
|
|
+import com.usai.redant.rautils.Receiver.RABroadcast;
|
|
|
+import com.usai.redant.rautils.Upload.RAUploadManager;
|
|
|
+import com.usai.redant.rautils.Utils.Network;
|
|
|
+import com.usai.redant.rautils.Utils.dbgUtil;
|
|
|
+
|
|
|
+import org.json.JSONException;
|
|
|
+import org.json.JSONObject;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+
|
|
|
+public abstract class AppImpl extends Application {
|
|
|
+ protected static AppImpl mApp;
|
|
|
+
|
|
|
+ private static final String TAG = "AppImpl";
|
|
|
+
|
|
|
+ public static final int DEFAULT_LOCATION_TIMEINTERVAL = 60 * 1000;
|
|
|
+ public static final int DEFAULT_DISTANCE = 60 * 50;
|
|
|
+ public static final int DEFAULT_PUSHNOTIFICATION_TIMEINTERVAL = 30 * 1000;
|
|
|
+
|
|
|
+ public static final int FLAG_MODULE_NONE = 0;
|
|
|
+ public static final int FLAG_MODULE_LOCATION = 1 << 1;
|
|
|
+ public static final int FLAG_MODULE_NOTIFICATION = 1 << 2;
|
|
|
+ public static final int FLAG_MODULE_UPLOAD = 1 << 3;
|
|
|
+// public static final int FLAG_LOCATION_SERVICE = 1<<1;
|
|
|
+
|
|
|
+ // service setup
|
|
|
+ protected int service_flag = FLAG_MODULE_NONE;
|
|
|
+ private IntentFilter msgFilter = new IntentFilter();
|
|
|
+
|
|
|
+ protected abstract void Setup();
|
|
|
+
|
|
|
+
|
|
|
+ // sub function upload
|
|
|
+ public interface ModuleUpload {
|
|
|
+
|
|
|
+ }
|
|
|
+ public void initModuleUpload(AppImpl.ModuleUpload uploadCallback) {
|
|
|
+ service_flag = service_flag | FLAG_MODULE_UPLOAD;
|
|
|
+// this.upload = locationCallback;
|
|
|
+ }
|
|
|
+
|
|
|
+ private RAUploadManager uploadManager = null;
|
|
|
+
|
|
|
+ public RAUploadManager getUploadManager() {
|
|
|
+ return uploadManager;
|
|
|
+ }
|
|
|
+
|
|
|
+ // sub function location
|
|
|
+ LocationListener locationListener = null;
|
|
|
+ LocationManager locationManager = null;
|
|
|
+ int locationTracing_timeInterval = DEFAULT_LOCATION_TIMEINTERVAL;
|
|
|
+ int locationTracing_distance = DEFAULT_DISTANCE;
|
|
|
+ // protected abstract void onLocationChanged(Location location);
|
|
|
+ private AppImpl.ModuleLocation locationCallback = null;
|
|
|
+
|
|
|
+ public interface ModuleLocation {
|
|
|
+
|
|
|
+
|
|
|
+ public abstract Location RequestCachedLocation();
|
|
|
+// public abstract void RequestLocation_ByBroadcast(String receiverID);
|
|
|
+
|
|
|
+ public abstract void onLocationChanged(Location location);
|
|
|
+// public abstract void onLogin();
|
|
|
+// public abstract void onLogout();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void initModuleLocation(AppImpl.ModuleLocation locationCallback) {
|
|
|
+ service_flag = service_flag | FLAG_MODULE_LOCATION;
|
|
|
+ this.locationCallback = locationCallback;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // sub function Notification
|
|
|
+ protected String url_checknotification = null;
|
|
|
+ int pushcheck_timeInterval = DEFAULT_PUSHNOTIFICATION_TIMEINTERVAL;
|
|
|
+ protected static final int NOTIFICATION_TYPE_PUSHNOTIFICATION = 0;
|
|
|
+ protected static final int NOTIFICATION_TYPE_SILENCECOMMAND = 1;
|
|
|
+ protected boolean enable_pushNotification = false;
|
|
|
+
|
|
|
+ // protected abstract Notification prepareNotification(JSONObject msg);
|
|
|
+// protected abstract void handleSilenceMessage(JSONObject msg);
|
|
|
+ public interface ModulePushNotification {
|
|
|
+ public abstract Notification prepareNotification(JSONObject msg);
|
|
|
+
|
|
|
+ public abstract void handleSilenceMessage(JSONObject msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void initModuleNotification(AppImpl.ModulePushNotification pushNotificationCallback, String url_checknotification) {
|
|
|
+ service_flag = service_flag | FLAG_MODULE_NOTIFICATION;
|
|
|
+ this.url_checknotification = url_checknotification;
|
|
|
+ this.pushNotificationCallback = pushNotificationCallback;
|
|
|
+ }
|
|
|
+
|
|
|
+ private AppImpl.ModulePushNotification pushNotificationCallback = null;
|
|
|
+ private AppImpl.checkPushTask m_task = null;
|
|
|
+
|
|
|
+ class checkPushTask extends AsyncTask<Void, Void, Boolean> {
|
|
|
+ int errorcode;
|
|
|
+ String content = null;
|
|
|
+ Context mcontext;
|
|
|
+
|
|
|
+ public checkPushTask(Context context) {
|
|
|
+ mcontext = context;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected Boolean doInBackground(Void... params) {
|
|
|
+ Log.d("SearchTask", "doInBackground");
|
|
|
+
|
|
|
+ if (!Network.isNetworkAvailable(AppImpl.getInstance()))
|
|
|
+
|
|
|
+ {
|
|
|
+ errorcode = Network.RESULT_NET_NOTAVAILABLE;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ String jstr = "";
|
|
|
+ jstr = Network.check_push(mcontext, new Bundle(), url_checknotification);
|
|
|
+ // if (module_name.equals("Announcements"))
|
|
|
+ // jstr = Network.get_announcements(lastid, limit);
|
|
|
+ // else
|
|
|
+ // jstr = Network.get_marketnews(lastid, limit);
|
|
|
+ if (jstr == null || jstr.length() <= 0) {
|
|
|
+ // Log.d(TAG, "json is wrong");
|
|
|
+
|
|
|
+ errorcode = Network.RESULT_NET_ERROR;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ content = jstr;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onPostExecute(Boolean success) {
|
|
|
+ String tag = "onPostExec";
|
|
|
+ Log.i(tag, "entry");
|
|
|
+ m_task = null;
|
|
|
+
|
|
|
+
|
|
|
+ if (success) {
|
|
|
+ JSONObject jsobj;
|
|
|
+ //
|
|
|
+ // array = new JSONArray(json);
|
|
|
+ try {
|
|
|
+ jsobj = new JSONObject(content);
|
|
|
+
|
|
|
+ int count = jsobj.getInt("count");
|
|
|
+
|
|
|
+ for (int i = 0; i < count; i++) {
|
|
|
+ JSONObject msg = jsobj.getJSONObject("msg_" + i);
|
|
|
+ int type = msg.getInt("type");
|
|
|
+ if (type == NOTIFICATION_TYPE_SILENCECOMMAND) {
|
|
|
+
|
|
|
+ pushNotificationCallback.handleSilenceMessage(msg);
|
|
|
+ Intent intent = new Intent(RABroadcast.EVENT_SILENCECOMMAND);
|
|
|
+ intent.putExtra("msg", msg.toString());
|
|
|
+ sendBroadcast(intent);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ pushNotification(msg);
|
|
|
+
|
|
|
+ Intent intent = new Intent(RABroadcast.EVENT_PUSHNOTIFICATION);
|
|
|
+ intent.putExtra("msg", msg.toString());
|
|
|
+ sendBroadcast(intent);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ } catch (JSONException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ super.onPostExecute(success);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onCancelled() {
|
|
|
+ m_task = null;
|
|
|
+ // showProgress(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void pushNotification(JSONObject msg) {
|
|
|
+
|
|
|
+ if (enable_pushNotification) {
|
|
|
+
|
|
|
+ boolean bsound = true;
|
|
|
+// mcontext.getSharedPreferences(
|
|
|
+// "setting", 0).getBoolean(
|
|
|
+// "notifications_new_message_sound", true);
|
|
|
+ boolean bvibrate = true;
|
|
|
+// mcontext.getSharedPreferences(
|
|
|
+// "setting", 0).getBoolean(
|
|
|
+// "notifications_new_message_vibrate", true);
|
|
|
+ NotificationManager nManager = (NotificationManager)
|
|
|
+ getSystemService(Context.NOTIFICATION_SERVICE);
|
|
|
+
|
|
|
+/*
|
|
|
+ 此部分在虚函数 prepareNotificaiton 中实现
|
|
|
+ Intent intent = new Intent(mcontext,
|
|
|
+ FunctionSelectActivity.class);
|
|
|
+ intent.putExtra("launcher", "notification");
|
|
|
+
|
|
|
+ PendingIntent pintent = PendingIntent.getActivity(
|
|
|
+ this, 0, intent,
|
|
|
+ PendingIntent.FLAG_UPDATE_CURRENT);
|
|
|
+
|
|
|
+
|
|
|
+ Notification.Builder builder = new Notification.Builder(mcontext);//新建Notification.Builder对象
|
|
|
+ String ntitle = "";
|
|
|
+ int number = ApexTrackingApplication.ncount++;
|
|
|
+ if (number > 1)
|
|
|
+ ntitle=number
|
|
|
+ + " "
|
|
|
+ + ApexTrackingApplication
|
|
|
+ .get_instance()
|
|
|
+ .getString(
|
|
|
+ R.string.str_mnotification_title);
|
|
|
+ else
|
|
|
+ ntitle = ApexTrackingApplication
|
|
|
+ .get_instance()
|
|
|
+ .getString(
|
|
|
+ R.string.str_notification_title);
|
|
|
+
|
|
|
+ builder.setContentTitle(ntitle);//设置标题
|
|
|
+ builder.setContentText(ApexTrackingApplication
|
|
|
+ .get_instance()
|
|
|
+ .getString(
|
|
|
+ R.string.str_notification_text)
|
|
|
+ + date);//设置内容
|
|
|
+ builder.setSmallIcon(R.drawable.ic_launcher);//设置图片
|
|
|
+ builder.setContentIntent(pintent);//执行intent
|
|
|
+
|
|
|
+
|
|
|
+ */
|
|
|
+ Notification notification = pushNotificationCallback.prepareNotification(msg);//builder.getNotification();//将builder对象转换为普通的notifications
|
|
|
+ notification.defaults = Notification.DEFAULT_ALL;
|
|
|
+
|
|
|
+// if (bsound && bvibrate)
|
|
|
+// notification.defaults = Notification.DEFAULT_ALL;
|
|
|
+// else if (bsound)
|
|
|
+// notification.defaults = Notification.DEFAULT_SOUND
|
|
|
+// | Notification.DEFAULT_LIGHTS;
|
|
|
+// else if (bvibrate)
|
|
|
+// notification.defaults = Notification.DEFAULT_VIBRATE
|
|
|
+// | Notification.DEFAULT_LIGHTS;
|
|
|
+ notification.flags = Notification.FLAG_AUTO_CANCEL;
|
|
|
+// notification.number = number; //number 是不是不需要了?
|
|
|
+
|
|
|
+ nManager.notify(R.layout.support_simple_spinner_dropdown_item, notification);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void checkpush(Context context) {
|
|
|
+
|
|
|
+ if (m_task != null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // mStatusMessageView.setText(R.string.str_Loading);
|
|
|
+ // showProgress(true);
|
|
|
+ m_task = new AppImpl.checkPushTask(context);
|
|
|
+
|
|
|
+ // TextView text_page = (TextView) view_page_footer
|
|
|
+ // .findViewById(R.id.text_page);
|
|
|
+ // text_page.setText("Loading...");
|
|
|
+ // text_page.setEnabled(false);
|
|
|
+ m_task.execute();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private BroadcastReceiver receiver = new BroadcastReceiver() {
|
|
|
+
|
|
|
+ public void onReceive(Context context, Intent intent) {
|
|
|
+ String action = intent
|
|
|
+ .getAction();
|
|
|
+ // 如果捕捉到的action是ACTION_BATTERY_CHANGED
|
|
|
+
|
|
|
+ if (RABroadcast.ACTION_UPLOAD_ADD_TASK.equals(action)) {
|
|
|
+
|
|
|
+ ArrayList<Bundle> tasks = intent.getParcelableArrayListExtra("tasks");
|
|
|
+
|
|
|
+
|
|
|
+ uploadManager.addTasks(tasks);
|
|
|
+ }
|
|
|
+// else if ("REDANT.RAImage.SAVE_TASK".equals(action)) {
|
|
|
+// uploadManager.stopAllTasks();
|
|
|
+// }
|
|
|
+ else if (intent
|
|
|
+ .getAction()
|
|
|
+ .equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
|
|
|
+
|
|
|
+ ConnectivityManager connManager = (ConnectivityManager) context
|
|
|
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
|
+
|
|
|
+ NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
|
|
|
+ if (networkInfo == null) {
|
|
|
+ dbgUtil.Logd(
|
|
|
+ "Current Network info",
|
|
|
+ "can not get Active NetworkInfo!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ NetworkInfo.State netState = networkInfo
|
|
|
+ .getState();
|
|
|
+ if (netState != NetworkInfo.State.CONNECTED) {
|
|
|
+ dbgUtil.Logd(
|
|
|
+ "Current Network info",
|
|
|
+ "not Connected!State="
|
|
|
+ + netState);
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+
|
|
|
+ int iconntype = -1;
|
|
|
+ iconntype = networkInfo
|
|
|
+ .getType();
|
|
|
+ SharedPreferences pref =
|
|
|
+ getSharedPreferences(
|
|
|
+ "UploadManager",
|
|
|
+ 0);
|
|
|
+
|
|
|
+
|
|
|
+ boolean
|
|
|
+ wifi_only
|
|
|
+ = pref.getBoolean("wifi_only",
|
|
|
+ false);
|
|
|
+
|
|
|
+ if
|
|
|
+ (wifi_only
|
|
|
+ == true
|
|
|
+ && iconntype !=
|
|
|
+ ConnectivityManager.TYPE_WIFI
|
|
|
+ && iconntype !=
|
|
|
+ 9/* earthnet */) {
|
|
|
+ uploadManager.stopAllTasks();
|
|
|
+// dbgUtil.Log(Log.DEBUG,
|
|
|
+// "Current Network info",
|
|
|
+// "not allowed!Connection type="
|
|
|
+// +
|
|
|
+// networkInfo.getTypeName());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ } else if (RABroadcast.ACTION_LOCATION_ENABLE_TRACING
|
|
|
+ .equals(action)) {
|
|
|
+ enable_locationTracing(locationTracing_timeInterval, locationTracing_distance);
|
|
|
+ } else if (RABroadcast.ACTION_LOCATION_DISABLE_TRACING
|
|
|
+ .equals(action)) {
|
|
|
+
|
|
|
+ disable_locationTracing();
|
|
|
+ } else if (RABroadcast.ACTION_LOCATION_REQUEST_LOCATION
|
|
|
+ .equals(action)) {
|
|
|
+
|
|
|
+
|
|
|
+ String receiverID=intent.getStringExtra("receiverID");
|
|
|
+// locationManager.requestSingleUpdate();
|
|
|
+ request_location(receiverID);
|
|
|
+// locationCallback.onLocationChanged();
|
|
|
+ }
|
|
|
+ else if (RABroadcast.ACTION_PUSHNOTIFICATION_CHECK
|
|
|
+ .equals(action))
|
|
|
+ {
|
|
|
+ checkpush(context);
|
|
|
+ }
|
|
|
+ else if (RABroadcast.ACTION_PUSHNOTIFICATION_ENABLE_CHECK
|
|
|
+ .equals(action))
|
|
|
+ {
|
|
|
+
|
|
|
+ String tag = "onReceive@Alarmreceiver";
|
|
|
+// Log.i( tag, "receive alarm broadcast caller =="
|
|
|
+// + intent.getStringExtra("caller"));
|
|
|
+
|
|
|
+ startalarm();
|
|
|
+
|
|
|
+// checkpush(context);
|
|
|
+
|
|
|
+// if (SystemClock.elapsedRealtime()
|
|
|
+// - ApexTrackingApplication.getLastCheckMessageTime() > 120000)
|
|
|
+// {
|
|
|
+// Log.i(tag, "check messsage");
|
|
|
+// ApexTrackingApplication.UpdateLastCheckMessageTime();
|
|
|
+// checkpush(context);
|
|
|
+//
|
|
|
+// }
|
|
|
+ }
|
|
|
+ else if (RABroadcast.ACTION_PUSHNOTIFICATION_DISABLE_CHECK
|
|
|
+ .equals(action))
|
|
|
+ {
|
|
|
+ if (m_task != null)
|
|
|
+ m_task.cancel(true);
|
|
|
+// NotificationManager nManager = (NotificationManager) context
|
|
|
+// .getSystemService(Context.NOTIFICATION_SERVICE);
|
|
|
+// nManager.cancel(R.layout.activity_apex);
|
|
|
+ cancelalarm();
|
|
|
+ // ApexTrackingApplication.put_password("");
|
|
|
+ // ApexTrackingApplication.put_sessionid("");
|
|
|
+ // ApexTrackingApplication.put_user("");
|
|
|
+// ApexTrackingApplication.logout();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ public static AppImpl getInstance() {
|
|
|
+ return mApp;
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void onCreate() {
|
|
|
+ Log.d("Apex Driver", "ApexDriverApplication onCreate: ");
|
|
|
+ super.onCreate();
|
|
|
+
|
|
|
+ mApp = this;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Setup();
|
|
|
+
|
|
|
+ msgFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
|
|
+
|
|
|
+ if ((service_flag & FLAG_MODULE_UPLOAD) == FLAG_MODULE_UPLOAD) {
|
|
|
+ uploadManager = new RAUploadManager(getApplicationContext());
|
|
|
+// msgFilter.addAction("REDANT.POP.RESET_LOCATION");
|
|
|
+// msgFilter.addAction("REDANT.POP.QUERY_UPLOAD_STATE");
|
|
|
+ msgFilter.addAction("REDANT.BROADCAST.ACTION_UPLOAD_ADD_TASK");
|
|
|
+// msgFilter.addAction("REDANT.BROADCAST.UPLOAD_MODIFY_QUEUE");
|
|
|
+// msgFilter.addAction("REDANT.BROADCAST.UPLOAD_RETRY_UPLOAD");
|
|
|
+ }
|
|
|
+ if ((service_flag & FLAG_MODULE_LOCATION) == FLAG_MODULE_LOCATION) {
|
|
|
+
|
|
|
+
|
|
|
+ msgFilter.addAction(RABroadcast.ACTION_LOCATION_ENABLE_TRACING);
|
|
|
+ msgFilter.addAction(RABroadcast.ACTION_LOCATION_DISABLE_TRACING);
|
|
|
+ msgFilter.addAction(RABroadcast.ACTION_LOCATION_REQUEST_LOCATION);
|
|
|
+// msgFilter.addAction("REDANT.BROADCAST.RESET_LOCATION");
|
|
|
+ locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
|
|
+
|
|
|
+ locationListener = new LocationListener() {
|
|
|
+
|
|
|
+ // Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
|
|
|
+ @Override
|
|
|
+ public void onStatusChanged(String provider, int status,
|
|
|
+ Bundle extras) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // Provider被enable时触发此函数,比如GPS被打开
|
|
|
+ @Override
|
|
|
+ public void onProviderEnabled(String provider) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // Provider被disable时触发此函数,比如GPS被关闭
|
|
|
+ @Override
|
|
|
+ public void onProviderDisabled(String provider) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
|
|
|
+ @Override
|
|
|
+ public void onLocationChanged(Location location) {
|
|
|
+ locationCallback.onLocationChanged(location);
|
|
|
+
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+ enable_locationTracing(locationTracing_timeInterval, locationTracing_distance);
|
|
|
+
|
|
|
+
|
|
|
+// msgFilter.addAction("REDANT.POP.GPS_ON");
|
|
|
+// msgFilter.addAction("REDANT.POP.GPS_OFF");
|
|
|
+// msgFilter.addAction("REDANT.POP.REQUEST_LOCATION");
|
|
|
+ }
|
|
|
+ if ((service_flag & FLAG_MODULE_NOTIFICATION) == FLAG_MODULE_NOTIFICATION) {
|
|
|
+
|
|
|
+ if (TextUtils.isEmpty(url_checknotification)) {
|
|
|
+ Log.e(TAG, "onCreate: setup FLAG_SERVICE_NOTIFICATION without url_checknotification");
|
|
|
+ }
|
|
|
+
|
|
|
+ msgFilter.addAction("REDANT.BROADCAST.ACTION_PUSHNOTIFICATION_CHECK");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ registerReceiver(receiver, msgFilter);
|
|
|
+
|
|
|
+ super.onCreate();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //check push
|
|
|
+ private void startalarm()
|
|
|
+ {
|
|
|
+
|
|
|
+// SharedPreferences pref = getSharedPreferences("Apex", 0);
|
|
|
+// boolean autologin = pref.getBoolean("autologin", false);
|
|
|
+// if (autologin == false)
|
|
|
+// return;
|
|
|
+
|
|
|
+ // 启动完成
|
|
|
+ Intent iAlarm = new Intent(this, BroadcastReceiver.class);
|
|
|
+// iAlarm.putExtra("caller", caller);
|
|
|
+ iAlarm.setAction(RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
|
|
|
+ PendingIntent sender = PendingIntent.getBroadcast(this, 0,
|
|
|
+ iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
|
|
|
+
|
|
|
+ long firstime = SystemClock.elapsedRealtime();
|
|
|
+// UpdateLastAlermTime();
|
|
|
+ AlarmManager am = (AlarmManager) this.getSystemService(
|
|
|
+ Context.ALARM_SERVICE);
|
|
|
+
|
|
|
+ // 30秒一个周期,不停的发送广播
|
|
|
+ am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
|
|
|
+ pushcheck_timeInterval, sender);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void cancelalarm()
|
|
|
+ {
|
|
|
+
|
|
|
+ // 启动完成
|
|
|
+ Intent iAlarm = new Intent(this, BroadcastReceiver.class);
|
|
|
+ iAlarm.setAction(RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
|
|
|
+ PendingIntent sender = PendingIntent.getBroadcast(this, 0,
|
|
|
+ iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
|
|
|
+
|
|
|
+ AlarmManager am = (AlarmManager) getSystemService(
|
|
|
+ Context.ALARM_SERVICE);
|
|
|
+
|
|
|
+ am.cancel(sender);
|
|
|
+ }
|
|
|
+ // location
|
|
|
+ void disable_locationTracing() {
|
|
|
+ locationManager.removeUpdates(locationListener);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ void enable_locationTracing(int timeInterval, int distance ) {
|
|
|
+
|
|
|
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
|
+ // TODO: Consider calling
|
|
|
+ // ActivityCompat#requestPermissions
|
|
|
+ // here to request the missing permissions, and then overriding
|
|
|
+ // public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
|
|
+ // int[] grantResults)
|
|
|
+ // to handle the case where the user grants the permission. See the documentation
|
|
|
+ // for ActivityCompat#requestPermissions for more details.
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ locationManager.requestLocationUpdates(
|
|
|
+ "fused", timeInterval, distance,
|
|
|
+ locationListener);
|
|
|
+// if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
|
|
|
+//
|
|
|
+//
|
|
|
+//
|
|
|
+//
|
|
|
+// } else if (locationManager
|
|
|
+// .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
|
|
|
+//
|
|
|
+//
|
|
|
+// locationManager.requestLocationUpdates(
|
|
|
+// LocationManager.NETWORK_PROVIDER, timeInterval, distance,
|
|
|
+// locationListener);
|
|
|
+//
|
|
|
+// }
|
|
|
+ }
|
|
|
+
|
|
|
+ protected Location request_cachedlocation()
|
|
|
+ {
|
|
|
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //使用GPS获取上一次的地址,这样获取到的信息需要多次,才能够显示出来,所以后面有动态的判断
|
|
|
+ Location location = locationManager.getLastKnownLocation("fused");
|
|
|
+ return location;
|
|
|
+
|
|
|
+ }
|
|
|
+ protected void request_location(final String receiverID)
|
|
|
+ {
|
|
|
+ if(receiverID==null)
|
|
|
+ throw new IllegalArgumentException("receiverID can't be null");
|
|
|
+
|
|
|
+// Criteria criteria = new Criteria();
|
|
|
+// criteria.setAccuracy(Criteria.ACCURACY_COARSE);//低精度,如果设置为高精度,依然获取不了location。
|
|
|
+// criteria.setAltitudeRequired(false);//不要求海拔
|
|
|
+// criteria.setBearingRequired(false);//不要求方位
|
|
|
+// criteria.setCostAllowed(true);//允许有花费
|
|
|
+// criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
|
|
|
+//
|
|
|
+// //从可用的位置提供器中,匹配以上标准的最佳提供器
|
|
|
+// String locationProvider = locationManager.getBestProvider(criteria, true);
|
|
|
+
|
|
|
+
|
|
|
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
|
+ // TODO: Consider calling
|
|
|
+ // ActivityCompat#requestPermissions
|
|
|
+ // here to request the missing permissions, and then overriding
|
|
|
+ // public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
|
|
+ // int[] grantResults)
|
|
|
+ // to handle the case where the user grants the permission. See the documentation
|
|
|
+ // for ActivityCompat#requestPermissions for more details.
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+
|
|
|
+ LocationListener singleListener = new LocationListener() {
|
|
|
+ @Override
|
|
|
+ public void onLocationChanged(Location location) {
|
|
|
+
|
|
|
+ Intent Bintent = new Intent(RABroadcast.EVENT_RETURN_LOCATION);
|
|
|
+ Bintent.putExtra("location",location);
|
|
|
+ Bintent.putExtra("receiverID",receiverID);
|
|
|
+ sendBroadcast(Bintent);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onStatusChanged(String s, int i, Bundle bundle) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onProviderEnabled(String s) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onProviderDisabled(String s) {
|
|
|
+
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+ locationManager.requestSingleUpdate("fused", singleListener, null);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|