是否可以通过intent-filters和广播接收器获取复制的文本? 我想开发一个字典应用程序,当用户在手机中的任何地方复制文本时,我想要显示文本的含义。 目前我已经尝试使用基本活动来注册听众,但我不符合我的需要。
mClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
listener = new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
performClipboardCheck();
}
};
mClipboard.addPrimaryClipChangedListener(listener);
感谢。
答案 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
希望这会有所帮助。