【问题标题】:Dealing with deprecated android.text.ClipboardManager处理已弃用的 android.text.ClipboardManager
【发布时间】:2011-12-24 19:18:02
【问题描述】:

android.text.ClipboardManager 自 API 级别 11 起已弃用,取而代之的是 android.content.ClipboardManager (source)。

如何编写支持这两种情况的代码?导入 android.content.ClipboardManager 并使用它在 11+ 中有效,但在 10 中强制关闭。将导入更改为 android.text.ClipboardManager 会在 11+ 中引发一堆弃用警告。

如何顺利处理这两种情况?我需要导入什么?

【问题讨论】:

    标签: java android clipboard


    【解决方案1】:

    我最终只使用了旧方法(android.text.ClipboardManager 和来自 this answer 的代码),以及几个 @SuppressWarnings("deprecation") 注释。

    【讨论】:

    • 那么弃用解决方案呢..??
    【解决方案2】:

    参考this answer

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) context
            .getSystemService(Context.CLIPBOARD_SERVICE);
    final android.content.ClipData clipData = android.content.ClipData
            .newPlainText("text label", "text to clip");
    clipboardManager.setPrimaryClip(clipData);
    } else {
    final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context
            .getSystemService(Context.CLIPBOARD_SERVICE);
    clipboardManager.setText("text to clip");
    }
    

    【讨论】:

      【解决方案3】:

      明确:

          @SuppressWarnings("deprecation")
          android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
          clipboard.setText(shareViaSMSBody);
      

      由于这必须继续在旧设备上运行,因此不推荐使用的代码可能不会从 Android 中删除。

      【讨论】:

        【解决方案4】:

        如果您仍然支持

         ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
         ClipData clip = ClipData.newPlainText("label for text", "text to copy");
         clipboard.setPrimaryClip(clip);
        

        【讨论】:

        • 好吧,我女朋友用的是旧的 kindle,所以 sdk 15 不是一个选择
        【解决方案5】:

        以文本形式读取最新的剪贴板:

        val clipboardManager = context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
        clipboardManager.addPrimaryClipChangedListener {
            val clipboardAsText = clipboardManager.primaryClip?.getItemAt(0)?.text
            if (clipboardAsText != null) {
                Toast.makeText(context, "Text in clipboard: $clipboardAsText", Toast.LENGTH_SHORT).show()
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-03-14
          • 2022-11-20
          • 1970-01-01
          • 2020-02-26
          • 1970-01-01
          • 2013-09-04
          • 1970-01-01
          • 1970-01-01
          • 2020-12-10
          相关资源
          最近更新 更多