是否可以通过intent-filter和broadcastreciever获取剪贴板管理器?

时间:2015-09-11 13:59:42

标签: android broadcastreceiver intentfilter clipboardmanager

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

 mClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

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

感谢。

3 个答案:

答案 0 :(得分:0)

  

是否可以通过intent-filters和广播接收器获取复制文本?

没有

答案 1 :(得分:0)

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

for 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();
                }
            }); 

对于kotlin

  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 :(得分:0)

您可以编写undefined来检查剪贴板并将接收器附加到const styles = theme => ({ subtitle: { height: "auto" }, root: { display: "flex", flexWrap: "wrap", justifyContent: "space-around", overflow: "hidden", backgroundColor: theme.palette.background.paper, margin: 0 }, gridList: { width: "80%", height: "auto" }, icon: { color: "rgba(255, 255, 255, 0.54)" } }); class GridListings extends Component { constructor(props) { super(props); } render() { const { classes } = this.props; return ( <div className={classes.root}> <Grid> <GridList cellHeight={100} cols={3} className={classes.gridList}> <GridListTile key="Subheader" cols={3} rows={1}> <ListSubheader component="div" style={{ fontSize: "60px", marginTop: "20px" }} > Listings </ListSubheader> </GridListTile> {tileData.map(tile => ( <GridListTile key={tile.img} cols={1} rows={3}> <img src={tile.img} alt={tile.title} /> <GridListTileBar className={classes.subtitle} title={tile.title} subtitle={<span>by: {tile.author}</span>} actionIcon={ <IconButton className={classes.icon}> <InfoIcon /> </IconButton> } /> </GridListTile> ))} </GridList> </Grid> </div> ); } } Grid.propTypes = { classes: PropTypes.object.isRequired }; export default withStyles(styles)(GridListings); 。 所以服务类应该像这样:

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

希望这会有所帮助。