2017-05-28 22 views
0

确切的说,如果Android设备启动的SIM卡,该应用程序有一个概率崩溃,否则它不会崩溃。该系统后使用Qt开发的Android设备死机自动起动应用程序启动

我有测试在多个设备上的应用程序,两个设备都基于高通android源码,也许是基于AOSP,Android的版本是5.1.1和6.0,该应用程序会崩溃在他们两个,但是,如果我手动启动应用程序,一切正常。另两台设备分别是Huawei Mate 9和Huawei Honor 4A,在华为设备上运行良好。

我看看Android的源文件: frameworks\base\core\java\com\android\internal\app\WindowDecorActionBar.java frameworks\base\core\java\com\android\internal\widget\ActionBarOverlayLayout.java

ActionBarOverlayLayout.setActionBarVisibilityCallback方法mContextView是有效的,因此,一个异常是从功能doHide扔出来的对象之前调用,但是,如果我开始应用程序手动调用另一个函数WindowDecorActionBar.hide,而不是doHide,所以应用程序正常运行。

真让我困惑的是当android系统启动时SIM卡如何影响应用程序?

回答

0

虽然,我不能找出真正的原因,但它确实工作

虽然收到的BOOT_COMPLETED广播,如果SIM卡插入时,只需确保设备调用之前有信号startActivity方法。

public static boolean getAirplaneMode(Context context){ 
    int isAirplaneMode = Settings.System.getInt(context.getContentResolver(), 
          Settings.System.AIRPLANE_MODE_ON, 0) ; 
    return (isAirplaneMode == 1)?true:false; 
} 

public class BootBroadcastReceiver extends BroadcastReceiver{ 
    static final String ACTION = "android.intent.action.BOOT_COMPLETED"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(ACTION)){ 
      Intent mainActivityIntent=new Intent(context,NotificationClient.class); 
      mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 

      if (!getAirplaneMode(context)) { 
       while (tm.getSimState() != tm.SIM_STATE_ABSENT) { 
        if (tm.getNetworkType() != tm.NETWORK_TYPE_UNKNOWN) 
         break; 
       }     
      } 

      context.startActivity(mainActivityIntent); 
     } 
    } 
} 
相关问题