美文网首页
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