美文网首页
2018-07-10面试经历滑铁卢整理面试笔记

2018-07-10面试经历滑铁卢整理面试笔记

作者: 空老表 | 来源:发表于2018-07-11 19:47 被阅读0次
  • 1.开机启动
    前沿:一直做的是传统的APP,我是深恶痛绝这种流氓操作的,但是别人是工业软件,可以涉及到这方面的操作,我以传统的思维告诉面试官这个不能做,有点尴尬,后来查资料发现,只需要注册开机广播,并且手动打开自启动的权限就可以做到(米6的手机测试通过),以下是代码:

在manifest里面注册开机启动的广播

<receiver android:name=".AutoStartReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <category android:name="android.intent.category.HOME"/>
        </intent-filter>
    </receiver>

新建一个类AutoStartReceiver,用于接收开机启动的广播,并且启动自身的activity

public class AutoStartReceiver extends BroadcastReceiver {
      @Override
      public void onReceive(Context context, Intent intent) {
          Intent i = new Intent(context, MainActivity.class);
          i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          context.startActivity(i);
      }
}

最后重要的一部:打开手机的自启动权限,不然接收不到广播

  • 2.熄屏启动,在屏幕熄掉以后在外部做一个类似于键盘解锁的界面,感觉需要做的应该是在点亮屏幕的时候拉活自己应用,然后做相关的处理(但是我在研究中发现监听灭屏和点亮屏幕的广播只能显示的注册,而且退出过后必须要销毁,不然应用回崩溃,目前还没有相关的解决方案。这里只做记录,待以后再做更新)

动态注册屏幕熄灭都点亮的广播

class MainActivity : AppCompatActivity() {

var receiver: ScreenBroadcastReceiver? = null


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    receiver = ScreenBroadcastReceiver()

    val filter = IntentFilter()
    filter.addAction(Intent.ACTION_SCREEN_ON)
    filter.addAction(Intent.ACTION_SCREEN_OFF)
    filter.addAction(Intent.ACTION_USER_PRESENT)
    registerReceiver(receiver, filter)

}
override fun onDestroy() {
    super.onDestroy()
    unregisterReceiver(receiver!!)
}
  }

编写收到广播后要执行的操作

public class ScreenBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "ScreenBroadcastReceiver";

@Override
public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "onReceive");
    String action = intent.getAction();

    if (Intent.ACTION_SCREEN_ON.equals(action)) {
        Log.d(TAG, "screen on");
    } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
        Log.d(TAG, "screen off");
    } else if (Intent.ACTION_USER_PRESENT.equals(action)) {
        Log.d(TAG, "screen unlock");
    }
}
}
  • 3.检测APP端是否在线,应该采用心跳包机制,没几秒钟发送给服务端一个信号,我还在而已,并没有多少难度,但是犹豫一直没有经历过这个所以没有答出来,1年前我是听过的。。。

相关文章

网友评论

      本文标题:2018-07-10面试经历滑铁卢整理面试笔记

      本文链接:https://www.haomeiwen.com/subject/fekkpftx.html