Java 检测到新SIM卡时,活动重新启动
我一直在开发一个应用程序,用于接收Java 检测到新SIM卡时,活动重新启动,java,android,android-broadcastreceiver,Java,Android,Android Broadcastreceiver,我一直在开发一个应用程序,用于接收SIM\u STATUS\u CHANGED的广播。我一直注意到,每当我在应用程序运行时在设备中卸下并重新插入SIM卡时,在切换飞行模式后再次检测到SIM卡时,活动就会重新出现 任何理由!!!这是默认行为。。我一直在谷歌上搜索,但没有找到任何关于这个问题的文章 Manifest.xml <receiver android:name="com.yego.util.SimChangedReceiver"> <intent-
SIM\u STATUS\u CHANGED
的广播。我一直注意到,每当我在应用程序运行时在设备中卸下并重新插入SIM卡时,在切换飞行模式后再次检测到SIM卡时,活动就会重新出现
任何理由!!!这是默认行为。。我一直在谷歌上搜索,但没有找到任何关于这个问题的文章
Manifest.xml
<receiver android:name="com.yego.util.SimChangedReceiver">
<intent-filter>
<action android:name="android.intent.action.SIM_STATE_CHANGED"/>
</intent-filter>
</receiver>
检测到新SIM卡时活动重新启动
这意味着您的应用程序崩溃您需要与问题共享崩溃日志请同时向我们显示您的AndroidManifest.xml
否它没有崩溃。。它只是重新创建显示清单中定义了活动吗?您是否看到Log.e第一次执行等待任务
?WaitUntil实际上做什么?它能挂起你的主线程吗?@peshkiraWaitUtil
是一个AsyncTask
,实际运行指定时间。
public class SimChangedReceiver extends BroadcastReceiver implements WaitUtil.WaitListner {
TelephonyManager telephonyManager;
SharedPrefUtil objSharedPref;
DBHelper dbHelper;
static Integer waitCount;
@Override
public void onReceive(Context context, Intent intent) {
telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int simState = telephonyManager.getSimState();
switch (simState) {
case TelephonyManager.SIM_STATE_ABSENT:
Log.e("MyApp", "Sim State absent");
break;
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
Log.e("MyApp", "Sim State network locked");
break;
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
Log.e("MyApp", "Sim State pin required");
break;
case TelephonyManager.SIM_STATE_PUK_REQUIRED:
Log.e("MyApp", "Sim State puk required");
break;
case TelephonyManager.SIM_STATE_UNKNOWN:
Log.e("MyApp", "Sim State unknown");
break;
case TelephonyManager.SIM_STATE_READY:
try {
Log.e("MyApp", "Sim State Ready");
objSharedPref = new SharedPrefUtil(context);
if (objSharedPref.GetAppStringPrefByKey(R.string.device_sim_id_key).equals("")) { // No SIM Id is stored in preference
objSharedPref.SetAppPrefsByKey(R.string.device_sim_id_key, telephonyManager.getSimSerialNumber());
} else {
if (!objSharedPref.GetAppStringPrefByKey(R.string.device_sim_id_key).equals(telephonyManager.getSimSerialNumber())) { // saved sim id does not match curent sim id
objSharedPref.SetAppPrefsByKey(R.string.device_sim_id_key, telephonyManager.getSimSerialNumber());
dbHelper = DBHelper.getInstance(context);
Log.e("MyApp", "Executing Wait Task First Time");
WaitUtil waitUtil = new WaitUtil(this);
waitUtil.execute(1000);
waitCount = 1;
}
}
} catch (SecurityException e) {
Crashlytics.logException(e);
} catch (Exception e) {
Crashlytics.logException(e);
}
break;
}
}
public void onWaitaskCompleted(boolean status) {
try {
if ((telephonyManager.getSubscriberId() != null && !telephonyManager.getSimCountryIso().equals("") &&
!telephonyManager.getNetworkCountryIso().equals("")) || waitCount >= 20) {
GetSimInfo(telephonyManager);
} else {
Log.e("MyApp", "Executing Wait Task" + String.valueOf(waitCount));
WaitUtil waitUtil = new WaitUtil(this);
waitUtil.execute(3000);
waitCount++;
}
}catch (SecurityException e){
Crashlytics.logException(e);
}