分享

Android双屏异显

 brightknight 2019-09-11

Android的双屏异显

最近在做超市收银系统,需要双屏异显,全局设置客户屏显示内容,做一下笔记。

1.客户屏:继承Presentation

  1. public class CustomerDisplay extends Presentation {
  2. private Context mContext;
  3. private TextView tv;
  4. public CustomerDisplay(Context outerContext, Display display) {
  5. super(outerContext,display);
  6. mContext = outerContext;
  7. }
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  12. setContentView(R.layout.view_display_customer);
  13. tv = findViewById(R.id.tv);
  14. }
  15. /**
  16. * 设置左侧预购买商品信息
  17. */
  18. public void setProductList(String str){
  19. tv.setText(str);
  20. }
  21. /**
  22. * 设置右侧显示的广告
  23. */
  24. public void setAdvertisement(){
  25. //
  26. }
  27. }

2.客户屏工具类

需要注意的是传入的Context为getApplicationContext(),否则不能全局双屏异显,只能在一个界面中双屏显示

  1. public class CustomerEngine {
  2. // 获取设备上的屏幕
  3. private DisplayManager mDisplayManager;// 屏幕管理器
  4. private Display[] displays;// 屏幕数组
  5. private CustomerDisplay mCustomerDisplay; //(继承Presentation)
  6. private static CustomerEngine instance;
  7. /**
  8. * 单例模式,创建的时候把界面绑定到第二个屏幕中
  9. * @param context 这里需要传入getApplicationContext(),就能实现全局双屏异显
  10. * @return
  11. */
  12. public static CustomerEngine getInstance(Context context){
  13. if(instance == null){
  14. instance = new CustomerEngine(context);
  15. }
  16. return instance;
  17. }
  18. public static void colose(){
  19. instance = null;
  20. }
  21. private CustomerEngine(Context context){
  22. mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
  23. displays = mDisplayManager.getDisplays();
  24. if (null == mCustomerDisplay && displays.length > 1) {
  25. mCustomerDisplay = new CustomerDisplay(context, displays[1]);// displays[1]是副屏
  26. mCustomerDisplay.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
  27. mCustomerDisplay.show();
  28. }
  29. }
  30. /**
  31. * 显示客户购买的商品集合
  32. */
  33. public void setProductList(String str){
  34. if(mCustomerDisplay != null){
  35. mCustomerDisplay.setProductList(str);
  36. }
  37. }
  38. }

3.主屏

这里需要注意的是退出时需要完成退出应用,否则不能取消双屏异显

  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. setCustomerProductList();
  7. }
  8. /**
  9. * 设置客户屏显示商品内容
  10. */
  11. private void setCustomerProductList(){
  12. CustomerEngine.getInstance(getApplicationContext()).setProductList("测试一下吧");
  13. }
  14. @Override
  15. public void onBackPressed() {
  16. onDestroy();
  17. //完全退出应用,取消双屏异显
  18. Intent startMain = new Intent(Intent.ACTION_MAIN);
  19. startMain.addCategory(Intent.CATEGORY_HOME);
  20. startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  21. startActivity(startMain);
  22. System.exit(0);
  23. }
  24. }

4.对了,别忘了加权限

  1. <!-- 显示系统窗口权限 -->
  2. <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  3. <!-- 在 屏幕最顶部显示addview-->
  4. <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />


好了,这样就能实现全局双屏异显了。

这里是完整的demo

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多