Browse Source

sim 状态

liuzhenxing 3 years ago
parent
commit
8cef0d1f54

+ 43 - 2
app/src/main/java/com/xplora/xplauncher/activity/MainActivity.java

@@ -16,11 +16,13 @@ import com.xplora.xplauncher.R;
 import com.xplora.xplauncher.adapter.ContactsRecyclerAdapter;
 import com.xplora.xplauncher.adapter.RecyclerAdapter;
 import com.xplora.xplauncher.adapter.ViewPagerAdapter;
+import com.xplora.xplauncher.broadcast.SimStateReceiver;
 import com.xplora.xplauncher.broadcast.TimeBroadcastReceiver;
 import com.xplora.xplauncher.data.DataManager;
 import com.xplora.xplauncher.model.AppModel;
 import com.xplora.xplauncher.model.ContactModel;
 import com.xplora.xplauncher.utils.Constant;
+import com.xplora.xplauncher.utils.ResUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -29,12 +31,13 @@ public class MainActivity extends BaseActivity {
     private int mCurrentPagerIndex = Constant.HOME_INDEX;
     private int mAppTitleStatus = 1;
     private int mDeleteBtnStatus = 0;
-    private int mWarningStatus = 1; //表盘界面,是否显示 warning 及状态, 0:不显示; >0 显示
+    private int mWarningStatus = 0; //表盘界面,是否显示 warning 及状态, 0:不显示; >0 显示
 
     private final List<View> mPagesDatas = new ArrayList<>();
     private final List<Object> mPagerViews = new ArrayList<>();
     private ViewPagerAdapter mViewPagerAdapter = null;
     private TimeBroadcastReceiver mTimeReceiver = null;
+    private SimStateReceiver mSimStateReceiver = null;
 
     private Button mWarningButton;
 
@@ -121,7 +124,24 @@ public class MainActivity extends BaseActivity {
         mWarningButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-
+                if (mWarningStatus <= 0)
+                    return;
+
+                String packageName = "com.xplora.xponboarding";
+                String activity = "";
+                if (mWarningStatus == 1) {//no sim
+                    activity = packageName + ".Activity.SimInstallActivity";
+                } else if (mWarningStatus == 2) { //watch 未激活
+                    activity = packageName + ".Activity.SimUnactivatedActivity";
+                } else if (mWarningStatus == 3) { //esim 未激活
+                    activity = packageName + ".Activity.EsimActivationActivity";
+                } else if (mWarningStatus == 4) {//sim 被锁
+                    activity = packageName + ".Activity.SimLockedActivity";
+                }
+                ComponentName component = new ComponentName(packageName, activity);
+                Intent intent = new Intent();
+                intent.setComponent(component);
+                startActivity(intent);
             }
         });
     }
@@ -368,6 +388,11 @@ public class MainActivity extends BaseActivity {
         if (mTimeReceiver == null) {
             mTimeReceiver = new TimeBroadcastReceiver(this);
         }
+
+        //sim 卡状态变化
+        if (mSimStateReceiver == null) {
+            mSimStateReceiver = new SimStateReceiver(this);
+        }
     }
 
     public void onReceiveTimeBroadcast() {
@@ -375,6 +400,18 @@ public class MainActivity extends BaseActivity {
         homeView.refreshTime();
     }
 
+    public void onReceiveSimStateBroadcast(int status) {
+        mWarningStatus = status;
+
+        if (status >= 1) {
+            int content = ResUtils.getStringId("sim_status_", status);
+            mWarningButton.setText(getString(content));
+            mWarningButton.setVisibility(View.VISIBLE);
+        } else {
+            mWarningButton.setVisibility(View.GONE);
+        }
+    }
+
     @Override
     protected void onResume() {
         super.onResume();
@@ -395,6 +432,10 @@ public class MainActivity extends BaseActivity {
             unregisterReceiver(mTimeReceiver);
             mTimeReceiver = null;
         }
+        if (mSimStateReceiver != null) {
+            unregisterReceiver(mSimStateReceiver);
+            mSimStateReceiver = null;
+        }
 
         HomePager homeView = (HomePager)mPagerViews.get(1);
         homeView.destroyView();

+ 45 - 0
app/src/main/java/com/xplora/xplauncher/broadcast/SimStateReceiver.java

@@ -0,0 +1,45 @@
+package com.xplora.xplauncher.broadcast;
+
+import android.app.Service;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.telephony.TelephonyManager;
+import com.xplora.xplauncher.activity.MainActivity;
+
+public class SimStateReceiver extends BroadcastReceiver {
+    MainActivity mActivity;
+    private final static String ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED";
+
+    public SimStateReceiver(MainActivity activity) {
+        mActivity = activity;
+    }
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        if (intent.getAction().equals(ACTION_SIM_STATE_CHANGED)) {
+            TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
+            int state = tm.getSimState();
+
+            switch (state) {
+                case TelephonyManager.SIM_STATE_READY :
+                    mActivity.onReceiveSimStateBroadcast(0);
+                    break;
+                case TelephonyManager.SIM_STATE_ABSENT :
+                    mActivity.onReceiveSimStateBroadcast(1);
+                    break;
+                case TelephonyManager.SIM_STATE_NETWORK_LOCKED :
+                    mActivity.onReceiveSimStateBroadcast(4);
+                    break;
+                case TelephonyManager.SIM_STATE_UNKNOWN :
+                    break;
+                case TelephonyManager.SIM_STATE_PIN_REQUIRED :
+                case TelephonyManager.SIM_STATE_PUK_REQUIRED :
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+}

+ 25 - 2
app/src/main/java/com/xplora/xplauncher/data/DataManager.java

@@ -225,6 +225,19 @@ public class DataManager extends Application {
         return ret;
     }
 
+    public static int getSimStatus() {
+        if (isSimAbsent())
+            return 1;
+        else if (isWatchUnactivated())
+            return 2;
+        else if (isESimUnactivated())
+            return 3;
+        else if (isSimLocked())
+            return 4;
+        else
+            return 0;
+    }
+
     //是否有 sim 卡
     public static boolean isSimAbsent() {
         TelephonyManager tm = (TelephonyManager)sContext.getSystemService(TELEPHONY_SERVICE);//取得相关系统服务
@@ -232,13 +245,23 @@ public class DataManager extends Application {
         return status == TelephonyManager.SIM_STATE_ABSENT;
     }
 
-    //是否 sim 未知状态
-    public static boolean isSimUnknow() {
+    //是否 sim 未激活
+    public static boolean isSimUnactivated() {
         TelephonyManager tm = (TelephonyManager)sContext.getSystemService(TELEPHONY_SERVICE);//未知状态
         int status = tm.getSimState();
         return status == TelephonyManager.SIM_STATE_UNKNOWN;
     }
 
+    //是否 esim 未激活
+    public static boolean isESimUnactivated() {
+        return true;
+    }
+
+    //是否 watch 未激活
+    public static boolean isWatchUnactivated() {
+        return true;
+    }
+
     //需要NetworkPIN解锁
     public static boolean isSimLocked() {
         TelephonyManager tm = (TelephonyManager)sContext.getSystemService(TELEPHONY_SERVICE);//取得相关系统服务

+ 5 - 0
app/src/main/res/values/strings.xml

@@ -5,4 +5,9 @@
     
     <string name="Contacts_Recent">Recent</string>
     <string name="Contacts_Contacts">Contacts</string>
+
+    <string name="sim_status_1">No SIM</string>
+    <string name="sim_status_2">Watch \nUnactivated</string>
+    <string name="sim_status_3">E-SIM \nUnactivated</string>
+    <string name="sim_status_4">SIM \nLocked</string>
 </resources>