Prechádzať zdrojové kódy

RAUtilsLibrary 增加service和broadcast receiver

Ray Zhang 7 rokov pred
rodič
commit
b17d7dda0a

+ 9 - 16
ApexDrivers/RAUtilsLibrary/RAUtilsLibrary.iml

@@ -71,13 +71,6 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -85,39 +78,39 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/attr" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/intermediate-jars" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged-aidl" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/packagedAssets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
       <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
     </content>
     <orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-1.0.2" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:/Users/macmini1/android project/ApexDrivers/RAUtilsLibrary/libs/bcprov-jdk15on-157.jar:unspecified@jar" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-annotations:27.1.1@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-27.1.1" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-compat-27.1.1" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel-1.1.0" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:/Users/macmini1/android project/ApexDrivers/RAUtilsLibrary/libs/httpmime-4.1.1.jar:unspecified@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-27.1.1" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-core-ui-27.1.1" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:/Users/ray/Documents/code_ERPSuiteAndroid/ApexDrivers/RAUtilsLibrary/libs/bcprov-jdk15on-157.jar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:/Users/ray/Documents/code_ERPSuiteAndroid/ApexDrivers/RAUtilsLibrary/libs/httpmime-4.1.1.jar:unspecified@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-27.1.1" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-3.0.2" level="project" />

+ 19 - 7
ApexDrivers/RAUtilsLibrary/src/main/AndroidManifest.xml

@@ -1,14 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.usai.redant.rautils">
 
-
-
-    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 
     <!-- 写联系人权限 -->
     <uses-permission android:name="android.permission.WRITE_CONTACTS" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
-    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+
     <!--
          <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
     <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
@@ -19,12 +20,23 @@
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
     <!-- External storage for caching. -->
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
-        android:theme="@style/AppTheme" />
-</manifest>
+        android:theme="@style/AppTheme">
+        <!--<service-->
+            <!--android:name=".Service.RAService"-->
+            <!--android:enabled="true"-->
+            <!--android:exported="true" />-->
+
+
+    </application>
+
+</manifest>

+ 50 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/Receiver/BootCompleteBroadcastReceiver.java

@@ -0,0 +1,50 @@
+package com.usai.redant.rautils.Receiver;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import com.usai.redant.rautils.Utils.dbgUtil;
+
+public abstract class BootCompleteBroadcastReceiver extends BroadcastReceiver {
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+
+        dbgUtil.fileLog(context,"RAUtilsLibrary: onReceive" + intent.getAction());
+
+//        dbgUtil.fileLog(context,"RAUtilsLibrary: BootCompleteBroadcastReceiver onReceive");
+
+        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+
+            OnBootComplete(context,intent);
+
+//            dbgUtil.fileLog(context,"RAUtilsLibrary: BootCompleteBroadcastReceiver ACTION_BOOT_COMPLETED redeived");
+//            // 启动完成
+//            Intent iAlarm = new Intent(context, Alarmreceiver.class);
+//            iAlarm.setAction("com.usai.apex.push");
+//            PendingIntent sender = PendingIntent.getBroadcast(context, 0,
+//            		iAlarm, 0);
+//            long firstime = SystemClock.elapsedRealtime();
+//            AlarmManager am = (AlarmManager) context
+//                    .getSystemService(Context.ALARM_SERVICE);
+//
+//            // 10秒一个周期,不停的发送广播
+//            am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
+//                    30 * 1000, sender);
+//			Intent intentservice = new Intent();
+//			intentservice.setClass(context, ApexPushService.class);
+//			if (intent.getExtras() != null)
+//				intentservice.putExtras(intent.getExtras());
+//			intentservice.setAction(intent.getAction());
+//			context.startService(intentservice);
+//            ApexTrackingApplication.startalarm("boot completed");
+        }
+        else if (Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(intent.getAction())) {
+            OnLockedBootComplete(context,intent);
+        }
+    }
+
+    protected abstract void OnBootComplete(Context context, Intent intent);
+    protected abstract void OnLockedBootComplete(Context context, Intent intent);
+}

+ 645 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/Service/RAService.java

@@ -0,0 +1,645 @@
+package com.usai.redant.rautils.Service;
+
+import android.Manifest;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+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.database.sqlite.SQLiteDatabase;
+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.Binder;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.SystemClock;
+import android.support.v4.app.ActivityCompat;
+import android.util.Log;
+
+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 RAService extends Service {
+
+    public static final int DEFAULT_TIMEINTERVAL = 60*1000;
+    public static final int DEFAULT_DISTANCE = 60*50;
+    public static final int FLAG_SERVICE_NONE = 0;
+    public static final int FLAG_SERVICE_LOCATION = 1 << 1;
+    public static final int FLAG_SERVICE_NOTIFICATION = 1 << 2;
+    public static final int FLAG_SERVICE_UPLOAD = 1 << 3;
+//    public static final int FLAG_LOCATION_SERVICE = 1<<1;
+
+    protected int service_flag = FLAG_SERVICE_NONE;
+    private IntentFilter msgFilter = new IntentFilter();
+
+    private RAUploadManager uploadManager = null;
+
+
+    LocationListener locationListener = null;
+    LocationManager locationManager = null;
+    int locationTracing_timeInterval = DEFAULT_TIMEINTERVAL ;
+    int locationTracing_distance = DEFAULT_DISTANCE ;
+
+    private 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.isNetworkIsAvailable(getApplication()))
+
+            {
+                errorcode = Network.RESULT_NET_NOTAVAILABLE;
+                return false;
+            }
+            String jstr = "";
+            jstr = Network.check_push(mcontext,new Bundle());
+            // 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;
+            // showProgress(false);
+
+            // switch (errorcode)
+            // {
+            // // case Network.RESULT_NET_NOTAVAILABLE:
+            // // {
+            // // Toast toast = Toast.makeText(
+            // // ApexTrackingApplication.get_instance(),
+            // // getText(R.string.msg_connection_none),
+            // // Toast.LENGTH_LONG);
+            // // toast.setGravity(Gravity.CENTER, 0, 0);
+            // // toast.show();
+            // // break;
+            // // }
+            // // case Network.RESULT_NET_ERROR:
+            // // {
+            // // Toast toast = Toast.makeText(
+            // // ApexTrackingApplication.get_instance(),
+            // // getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+            // // toast.setGravity(Gravity.CENTER, 0, 0);
+            // // toast.show();
+            // // break;
+            // // }
+            // // case Network.RESULT_ERROR:
+            // // // case Network.RESULT_RESPONSE_NULL:
+            // // {
+            // // Toast toast = Toast.makeText(
+            // // ApexTrackingApplication.get_instance(),
+            // // getText(R.string.msg_net_resulterror),
+            // // Toast.LENGTH_LONG);
+            // // toast.setGravity(Gravity.CENTER, 0, 0);
+            // // toast.show();
+            // // break;
+            // // }
+            //
+            // default:
+            // break;
+            // }
+
+            if (success)
+            {
+//                JSONObject jsobj;
+//                //
+//                // array = new JSONArray(json);
+//                try
+//                {
+//                    jsobj = new JSONObject(content);
+//
+//                    String message = jsobj.getString("message");
+//                    String date = jsobj.getString("date");
+//                    String s_id = jsobj.getString("s_id");
+//                    String e_id = jsobj.getString("e_id");
+//                    int count = jsobj.getInt("count");
+//                    SQLiteDatabase db = dbUtil.OpenDB(
+//                            ApexTrackingApplication.get_instance(), null, true);
+//                    db.execSQL("insert into push_message(s_id,e_id,msgcount,message,h_time,user,create_time,read) values('"
+//                            + s_id
+//                            + "','"
+//                            + e_id
+//                            + "',"
+//                            + count
+//                            + ",'"
+//                            + message
+//                            + "','"
+//                            + date
+//                            + "','"
+//                            + ApexTrackingApplication.get_user()
+//                            + "',"
+//                            + System.currentTimeMillis() + ",0)");
+//                    dbUtil.CloseDB(db);
+//
+//                    boolean bnotify = mcontext.getSharedPreferences("setting",
+//                            0).getBoolean("notifications_new_message", true);
+//                    if (bnotify)
+//                    {
+//
+//                        boolean bsound = mcontext.getSharedPreferences(
+//                                "setting", 0).getBoolean(
+//                                "notifications_new_message_sound", true);
+//                        boolean bvibrate = mcontext.getSharedPreferences(
+//                                "setting", 0).getBoolean(
+//                                "notifications_new_message_vibrate", true);
+//                        NotificationManager nManager = (NotificationManager) mcontext
+//                                .getSystemService(Context.NOTIFICATION_SERVICE);
+//
+////						Notification notification = new Notification(
+////								R.drawable.ic_launcher,
+////								mcontext.getString(R.string.str_notification_title),
+////								System.currentTimeMillis());
+//                        Intent intent = new Intent(mcontext,
+//                                FunctionSelectActivity.class);
+//                        intent.putExtra("launcher", "notification");
+//
+//                        PendingIntent pintent = PendingIntent.getActivity(
+//                                mcontext, 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 = builder.getNotification();//将builder对象转换为普通的notifications
+//
+//                        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;
+//
+//                        nManager.notify(R.layout.activity_apex, notification);
+//                    }
+//
+//
+//
+//                }
+//                catch (JSONException e)
+//                {
+//                    // TODO Auto-generated catch block
+//                    e.printStackTrace();
+//                }
+
+            }
+
+            super.onPostExecute(success);
+        }
+
+        @Override
+        protected void onCancelled()
+        {
+            m_task = null;
+            // showProgress(false);
+        }
+    }
+    public void checkpush(Context context)
+    {
+
+        if (m_task != null)
+        {
+            return;
+        }
+        // mStatusMessageView.setText(R.string.str_Loading);
+        // showProgress(true);
+        m_task = new 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();
+
+    }
+
+    public RAService() {
+    }
+
+
+    protected abstract void Setup();
+
+    protected abstract void onLocationChanged(Location location);
+
+    @Override
+    public IBinder onBind(Intent intent) {
+//         TODO: Return the communication channel to the service.
+//        throw new UnsupportedOperationException("Not yet implemented");
+        Log.d("", "onBind: bind service");
+        return new MyBinder();
+    }
+
+
+    public class MyBinder extends Binder {
+        /**
+         * 获取当前Service的实例
+         *
+         * @return
+         */
+        public RAService getService() {
+            return RAService.this;
+        }
+    }
+
+
+    @Override
+    public void onCreate() {
+
+        Log.d("_SERVICE", "create upload Service!!!");
+
+
+//        // 初始化异常捕获器
+//        CrashHandler.getSharedInstance().init(getApplicationContext());
+//        CrashHandler.getSharedInstance().preserver = new CrashHandler.InfoPreserver() {
+//            @Override
+//            public void saveUserInformation() {
+//                if (uploadManager != null) {
+//                    uploadManager.saveTasks();
+//                }
+//            }
+//
+//            @Override
+//            public void handleCrashInfo(String deviceInfo, String exception) {
+//                dbgUtil.fileLog(getApplicationContext(),"============================ app crash ============================");
+//                dbgUtil.fileLog(getApplicationContext(),"DEVICE");
+//                dbgUtil.fileLog(getApplicationContext(),deviceInfo);
+//                dbgUtil.fileLog(getApplicationContext(),"EXCEPTION");
+//                dbgUtil.fileLog(getApplicationContext(),exception);
+//                dbgUtil.fileLog(getApplicationContext(),"=============================== end ===============================");
+//                Log.d("_SERVICE", "Device Info: " + deviceInfo);
+//                Log.d("_SERVICE", "Crash Info: " + exception);
+//            }
+//        };
+
+
+        Setup();
+
+        msgFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+
+        if ((service_flag & FLAG_SERVICE_UPLOAD) == 1) {
+            uploadManager = new RAUploadManager();
+//            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_SERVICE_LOCATION) == 1) {
+
+            msgFilter.addAction("REDANT.BROADCAST.ACTION_LOCATION_ENABLE_TRACING");
+            msgFilter.addAction("REDANT.BROADCAST.ACTION_LOCATION_DISABLE_TRACING");
+            msgFilter.addAction("REDANT.BROADCAST.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) {
+                    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_SERVICE_NOTIFICATION) == 1) {
+
+            msgFilter.addAction("REDANT.BROADCAST.ACTION_PUSHNOTIFICATION_CHECK");
+
+        }
+
+        registerReceiver(uploadReceiver, msgFilter);
+
+        super.onCreate();
+
+    }
+
+
+    @Override
+    public void onDestroy() {
+        Log.e("_SERVICE", "onDestroy: ");
+        if (uploadManager != null)
+            uploadManager.saveTasks();
+    }
+
+    private BroadcastReceiver uploadReceiver = new BroadcastReceiver() {
+
+        public void onReceive(Context context, Intent intent) {
+            String action = intent
+                    .getAction();
+            // 如果捕捉到的action是ACTION_BATTERY_CHANGED
+
+            if ("REDANT.BROADCAST.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 = getApplication()
+                            .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 ("REDANT.BROADCAST.ACTION_LOCATION_ENABLE_TRACING"
+                    .equals(action))
+            {
+                enable_locationTracing(locationTracing_timeInterval,locationTracing_distance);
+            }
+            else if ("REDANT.BROADCAST.ACTION_LOCATION_DISABLE_TRACING"
+                    .equals(action))
+            {
+
+                disable_locationTracing();
+            }
+            else if ("REDANT.BROADCAST.ACTION_LOCATION_REQUEST_LOCATION"
+                    .equals(action))
+            {
+                request_location(intent);
+            }
+            else if ("REDANT.BROADCAST.ACTION_PUSHNOTIFICATION_CHECK"
+                    .equals(action))
+            {
+
+                String tag = "onReceive@Alarmreceiver";
+                Log.i( tag, "receive alarm broadcast caller =="
+                        + intent.getStringExtra("caller"));
+
+//                if (SystemClock.elapsedRealtime()
+//                        - ApexTrackingApplication.getLastCheckMessageTime() > 120000)
+//                {
+//                    Log.i(tag, "check messsage");
+//                    ApexTrackingApplication.UpdateLastCheckMessageTime();
+//                    checkpush(context);
+//
+//                }
+            }
+        }
+    };
+
+    void registerReceiver() {
+
+    }
+
+
+    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;
+        }
+
+        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
+
+
+            locationManager.requestLocationUpdates(
+                    LocationManager.GPS_PROVIDER, timeInterval, distance,
+                    locationListener);
+
+        } else if (locationManager
+                .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
+
+
+            locationManager.requestLocationUpdates(
+                    LocationManager.NETWORK_PROVIDER, timeInterval, distance,
+                    locationListener);
+
+        }
+    }
+
+    void request_location(Intent intent)
+    {
+        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;
+        }
+
+        Location location = null;
+        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
+        {
+
+            location = locationManager
+                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
+
+        }
+        else if (locationManager
+                .isProviderEnabled(LocationManager.NETWORK_PROVIDER))
+        {
+
+            location = locationManager
+                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
+
+        }
+
+//        SharedPreferences pref = RedAntApplication.getInstance()
+//                .getSharedPreferences("POP", 0);
+//        double lat = pref.getFloat("Lat", 9999);
+//        double lon = pref.getFloat("Lon", 9999);
+//
+//        // SharedPreferences.Editor editor = pref.edit();
+//        if (location != null)
+//        {
+//            float[] result = new float[1];
+//            if (lat != 9999 && lon != 9999)
+//            {
+//                Location.distanceBetween(lat, lon, location.getLatitude(),
+//                        location.getLongitude(), result);
+//                if (result[0] > 1000)
+//                {
+//                    sendBroadcast(new Intent("REDANT.POP.STATION_CHANGE"));
+//                    return;
+//                }
+//                else
+//                {
+//                    sendBroadcast(new Intent("REDANT.POP.STATION_NOT_CHANGE"));
+//                    return;
+//                }
+//            }
+//            sendBroadcast(new Intent("REDANT.POP.STATION_NOT_CHANGE"));
+//            return;
+//            // new Location();
+//            //
+//            // Location.distanceBetween(lat, lon, endLatitude, endLongitude,
+//            // results)
+//            //
+//            // editor.putFloat("Lat", (float) location.getLatitude());
+//            // editor.putFloat("Lon", (float) location.getLongitude());
+//
+//        }
+//        else
+//        {
+//            sendBroadcast(new Intent("REDANT.POP.STATION_NOT_CHANGE"));
+//            return;
+//        }
+        // editor.commit();
+
+        // Log.d("location:", "lat:" + latitude + "lon:" + longitude);
+    }
+}

+ 10 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/Upload/UploadCallback.java

@@ -0,0 +1,10 @@
+package com.usai.redant.rautils.Upload;
+
+public interface UploadCallback {
+
+
+//    private boolean queue_changed = false;
+
+//    public RAUploadManager uploadManager = new RAUploadManager();
+
+}

+ 112 - 2
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/Utils/Network.java

@@ -2,12 +2,15 @@ package com.usai.redant.rautils.Utils;
 
 import android.app.Application;
 import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.os.Bundle;
 import android.os.Environment;
+import android.text.TextUtils;
 import android.util.Log;
 
 import org.json.JSONException;
@@ -186,10 +189,9 @@ public class Network {
         return result.toString();
     }
 
-    public static boolean networkIsAvailable(Application application)// Context context)
+    public static boolean isNetworkIsAvailable(Application application)// Context context)
     {
         String TAG = "net_dbg@CheckNetwork";
-
         ConnectivityManager connManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
 
         NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
@@ -557,5 +559,113 @@ public class Network {
 
         return returnFile;
     }
+    public static String check_push(Context c,Bundle params)
+    {
+//        if(true)
+//            return null;
+        String TAG = "net_dbg@check_push";
+        if(params==null)
+            params = new Bundle();
+        params.putString("action", "handset_search");
+        params.putString("module_name", "Pull Message");
+        params.putString("uuid", RAUtil.getDUID(c.getApplicationContext()));
+//		String sessionid = ApexTrackingApplication.get_sessionid();
+        // if (TextUtils.isEmpty(sessionid))
+        // {
+        //
+        // Log.d(TAG, "no sessionid return!");
+        // return null;
+        //
+        // }
+        String user = ApexTrackingApplication.get_user();
+        if (TextUtils.isEmpty(user))
+        {
+
+            Log.d(TAG, "no user name return!");
+            return null;
+
+        }
+        // parms.putString("sessionid", sessionid);
+        parms.putString("user", user);
+        SQLiteDatabase db = dbUtil.OpenDB(
+                ApexTrackingApplication.get_instance(), null, false);
+        Cursor cursor = db.query("push_message", new String[] { "MAX(e_id)" },
+                "user = '" + ApexTrackingApplication.get_user() + "'", null,
+                null, null, null, null);
+        if (cursor.moveToNext())
+        {
+            String maxid = cursor.getString(0);
+            if (!TextUtils.isEmpty(maxid))
+                parms.putString("id", maxid);
+        }
+        dbUtil.CloseCursor(cursor);
+        dbUtil.CloseDB(db);
+
+        String jstr = getJson(Network.URL_PUSH, parms);
+        if (jstr == null || jstr.length() <= 0)
+        {
+            Log.d(TAG, "json is wrong");
+            return null;
+        }
+        JSONObject jsobj;
+        //
+        // array = new JSONArray(json);
+        try
+        {
+            jsobj = new JSONObject(jstr);
+            if (jsobj.length() > 0)
+            {
+                int iresult = jsobj.getInt("result");
+                if (iresult == Network.AP_SESSION_EXPIRED)
+                {
+                    Log.e(TAG, "AP_SESSION_EXPIRED");
+                    String pass;
+
+                    pass = ApexTrackingApplication.get_pass();
+                    Network.get_Auth(user, pass);
+                    jstr = getJson(Network.URL_PUSH, parms);
+                    jsobj = new JSONObject(jstr);
+                    iresult = jsobj.getInt("result");
+                }
+                if (iresult != Network.AP_MESSAGE_NEW)
+                {
+                    // session expired
+                    Log.d(TAG,
+                            "DOSE NOT GET NEW MESSAGE CODE="
+                                    + jsobj.getInt("result"));
+                    return null;
+                    // if (get_Auth(name, password) == RESULT_TRUE)
+                    // {
+                    // return get_records(name, password, parms);
+                    //
+                    // }
+                    // else
+                    // {
+                    //
+                    // Log.d(TAG,
+                    // "USER NOT AUTHORIZED CODE="
+                    // + jsobj.getInt("result"));
+                    // return null;
+                    // }
+                }
+                else
+                {
+                    return jstr;
+                }
+            }
+            else
+            {
+                Log.d(TAG, "json is wrong");
+                return null;
+            }
+        }
+        catch (JSONException e)
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
 
+        // return RESULT_ERROR;
+    }
 }

+ 7 - 3
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/Utils/RAUtil.java

@@ -250,16 +250,20 @@ public class RAUtil {
             return false;
         }
 
-        Log.d("_RAIMAGE", "checkPermissions23:==================================== ");
+
         ArrayList<String> request_list = new ArrayList<String>();
         Context context = applicationContext;
         for(String permission : permissions) {
 
             boolean pc = PermissionChecker.checkSelfPermission(context,permission)== PermissionChecker.PERMISSION_GRANTED;
-            if(!pc)
+            if(!pc) {
+                Log.d("RAUtilsLibrary", "checkPermissions23:==================================== ");
+                Log.d("RAUtilsLibrary", "checkPermissions23: permission"+ permission +" denied");
+                Log.d("RAUtilsLibrary", "checkPermissions23:==================================== ");
                 return false;
+            }
         }
-        Log.d("_RAIMAGE", "checkPermissions23:==================================== ");
+//        Log.d("RAUtilsLibrary", "checkPermissions23:==================================== ");
 
 
 

+ 1 - 1
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/Utils/dbgUtil.java

@@ -66,7 +66,7 @@ public class dbgUtil
 			dir.mkdirs();
 
 		Calendar c = Calendar.getInstance();
-		c.add(Calendar.MONDAY, -1);
+//		c.add(Calendar.DAY_OF_WEEK, -1);
 
 		String newtime = new SimpleDateFormat("yyyy-MM-dd").format(c
 				.getTimeInMillis());

+ 3 - 0
ApexDrivers/RAUtilsLibrary/src/main/res/values/strings.xml

@@ -1,3 +1,6 @@
 <resources>
     <string name="app_name">RAUtils</string>
+
+    <!--自定义广播消息-->
+
 </resources>

+ 8 - 14
ApexDrivers/app/app.iml

@@ -70,13 +70,6 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
@@ -84,21 +77,22 @@
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
       <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
       <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
     </content>
@@ -119,7 +113,6 @@
     <orderEntry type="library" name="Gradle: com.android.support:support-core-ui-27.1.1" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-1.1.2" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-core-utils-27.1.1" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:/Users/macmini1/android project/ApexDrivers/app/libs/core-2.3.0.jar:unspecified@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-3.0.2" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
@@ -137,6 +130,7 @@
     <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.core:common:1.1.0@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:/Users/ray/Documents/code_ERPSuiteAndroid/ApexDrivers/app/libs/core-2.3.0.jar:unspecified@jar" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.0" level="project" />
     <orderEntry type="module" module-name="RAUtilsLibrary" />
   </component>

+ 33 - 1
ApexDrivers/app/src/main/AndroidManifest.xml

@@ -2,6 +2,14 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.usai.redant.apexdrivers">
 
+
+    <!-- External storage for log and cache. -->
+    <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> -->
+    <!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> -->
+
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+
+
     <uses-permission android:name="android.permission.CAMERA"/>
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
     <uses-permission android:name="android.permission.VIBRATE"/>
@@ -13,6 +21,7 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 
+
     <application
         android:name=".ApexDriverApplication"
         android:allowBackup="true"
@@ -31,6 +40,28 @@
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
+
+
+        <service
+            android:name=".ApexDriversBackgroundService"
+            android:enabled="true"
+            android:exported="true" />
+
+
+        <receiver
+            android:name=".Receiver.ApexDriverBootCompleteReceiver"
+            android:directBootAware="true"
+            android:enabled="true"
+            android:exported="false"
+            android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
+            >
+            <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
+                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+            </intent-filter>
+
+        </receiver>
+
         <activity android:name=".Detail.DetailActivity"
                   android:screenOrientation="portrait">
         </activity>
@@ -55,6 +86,7 @@
                   android:screenOrientation="portrait">
         </activity>
 
+
     </application>
 
-</manifest>
+</manifest>

+ 23 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/ApexDriversBackgroundService.java

@@ -0,0 +1,23 @@
+package com.usai.redant.apexdrivers;
+
+import com.usai.redant.rautils.Service.RAService;
+import com.usai.redant.rautils.Utils.dbgUtil;
+
+public class ApexDriversBackgroundService extends RAService {
+    public ApexDriversBackgroundService() {
+    }
+
+    @Override
+    protected void Setup() {
+        service_flag=FLAG_SERVICE_UPLOAD|FLAG_SERVICE_NOTIFICATION|FLAG_SERVICE_LOCATION;
+
+        dbgUtil.fileLog(this,"ApexDriversBackgroundService Setup()");
+    }
+
+//    @Override
+//    public IBinder onBind(Intent intent) {
+//        // TODO: Return the communication channel to the service.
+////        throw new UnsupportedOperationException("Not yet implemented");
+//        return super.onBind(intent);
+//    }
+}

+ 24 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/MainActivity.java

@@ -14,6 +14,8 @@ import android.widget.RelativeLayout;
 import com.usai.redant.apexdrivers.Home.HomeFragment;
 import com.usai.redant.apexdrivers.Login.LoginFragment;
 import com.usai.redant.apexdrivers.Network.Network;
+import com.usai.redant.rautils.Utils.RAUtil;
+import com.usai.redant.rautils.Utils.dbgUtil;
 
 
 public class MainActivity extends AppCompatActivity implements LoginFragment.LoginCallBack {
@@ -21,6 +23,28 @@ public class MainActivity extends AppCompatActivity implements LoginFragment.Log
     private RelativeLayout mRootContainer;
     private final static String FragmentTag = "ContentFragmentTag";
 
+    void Test()
+    {
+        dbgUtil.fileLog(this,"lib import successful");
+
+
+        RAUtil.LibTest();
+
+
+        RAUtil.LibTest1();
+
+
+
+        int FLAG_LOCATION_NONE = 0 ;
+
+        int FLAG_LOCATION_SERVICE = 1 << 1;
+        int FLAG_NOTIFICATION_SERVICE = 1 << 2;
+        int FLAG_UPLOAD_SERVICE = 1 << 3;
+
+        int a = 0;
+    }
+
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

+ 54 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Receiver/ApexDriverBootCompleteReceiver.java

@@ -0,0 +1,54 @@
+package com.usai.redant.apexdrivers.Receiver;
+
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import com.usai.redant.apexdrivers.ApexDriversBackgroundService;
+import com.usai.redant.rautils.Receiver.BootCompleteBroadcastReceiver;
+import com.usai.redant.rautils.Utils.dbgUtil;
+
+public class ApexDriverBootCompleteReceiver extends BootCompleteBroadcastReceiver {
+
+//    @Override
+//    public void onReceive(Context context, Intent intent) {
+//        // TODO: This method is called when the BroadcastReceiver is receiving
+//        // an Intent broadcast.
+//        throw new UnsupportedOperationException("Not yet implemented");
+//    }
+
+    @Override
+    protected void OnBootComplete(Context context, Intent intent) {
+        Log.d("ApexDriver", "OnBootComplete: ");
+
+
+        dbgUtil.fileLog(context,"ApexDriver: OnBootComplete");
+
+
+
+			Intent intentservice = new Intent();
+			intentservice.setClass(context, ApexDriversBackgroundService.class);
+			if (intent.getExtras() != null)
+				intentservice.putExtras(intent.getExtras());
+			intentservice.setAction(intent.getAction());
+			context.startService(intentservice);
+
+    }
+
+	@Override
+	protected void OnLockedBootComplete(Context context, Intent intent) {
+		Log.d("ApexDriver", "OnBootComplete: ");
+
+
+		dbgUtil.fileLog(context,"ApexDriver: OnLockedBootComplete");
+
+
+
+		Intent intentservice = new Intent();
+		intentservice.setClass(context, ApexDriversBackgroundService.class);
+		if (intent.getExtras() != null)
+			intentservice.putExtras(intent.getExtras());
+		intentservice.setAction(intent.getAction());
+		context.startService(intentservice);
+	}
+}