【问题标题】:is it possible to get clipboard manager via intent-filter and broadcastreceiver?是否可以通过意图过滤器和广播接收器获取剪贴板管理器?
【发布时间】:2015-09-11 13:59:41
【问题描述】:

是否可以通过意图过滤器和广播接收器获取复制的文本? 我想开发一个字典应用程序,当用户在手机中的任何地方复制文本时,我想显示文本的含义。 目前我已经尝试使用 Base Activity 来注册监听器,但它不符合我的需要。

 mClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

        listener = new ClipboardManager.OnPrimaryClipChangedListener() {
            public void onPrimaryClipChanged() {
                performClipboardCheck();
            }
        };
        mClipboard.addPrimaryClipChangedListener(listener);

【问题讨论】:

    标签: android broadcastreceiver intentfilter clipboardmanager


    【解决方案1】:

    我就是这样做的,先打开你的应用程序然后关闭它,但如果想继续运行,你也可以编写服务

    对于 Java

    final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE);
                clipboard.addPrimaryClipChangedListener( new ClipboardManager.OnPrimaryClipChangedListener() {
                    public void onPrimaryClipChanged() {
                        String a = clipboard.getText().toString();
                        Toast.makeText(getBaseContext(),"Copy:\n"+a,Toast.LENGTH_LONG).show();
                    }
                }); 
    

    对于科特林

      clipboard= this.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
            clipboard.addPrimaryClipChangedListener (object : ClipboardManager.OnPrimaryClipChangedListener{
                override fun onPrimaryClipChanged() {
                  Log.d(TAG,"Copy:\n= "+clipboard.primaryClip.toString())
                }
    
            })
    

    【讨论】:

      【解决方案2】:

      您可以写一个service 来检查剪贴板并将接收器附加到那里的ClipboardManager。 所以服务类应该是这样的:

      class ClipBoardService : Service(), ClipboardManager.OnPrimaryClipChangedListener {
      override fun onPrimaryClipChanged() {
          val manager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
          if (manager.primaryClip.itemCount > 0) {
              val clip = manager.primaryClip.getItemAt(0).text.toString()
              toast(clip)
          }
      }
      
      
      override fun onBind(intent: Intent): IBinder {
          return Binder()
      }
      
      override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
          initReceiver()
          return START_STICKY
      }
      
      private fun initReceiver() {
          val manager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
          manager.removePrimaryClipChangedListener(this)
          manager.addPrimaryClipChangedListener(this)
      }
      }
      

      您可以使用自己的操作创建广播接收器并将其注册到您的活动的onStart 并在活动的onStop 上取消注册,然后在您的服务中使用sendBroadcast 方法向您的活动发送意图

      不要忘记在清单文件中声明服务

      <service
              android:name=".clipboard.ClipBoardService"
              android:enabled="true"
              android:exported="true" />
      

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        是否可以通过意图过滤器和广播接收器获取复制的文本?

        没有。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多