当前位置: 首页 > news >正文

网站上传到虚拟主机原创先锋 北京网站建设

网站上传到虚拟主机,原创先锋 北京网站建设,有免费做门户网站吗,软件开发计划模板PendingIntent翻译成中文为“待定意图”,这个翻译很好地表示了它的涵义。PendingIntent描述了封装Intent意图以及该意图要执行的目标操作。PendingIntent封装Intent的目标行为的执行是必须满足一定条件,只有条件满足,才会触发意图的目标操作。…

PendingIntent翻译成中文为“待定意图”,这个翻译很好地表示了它的涵义。PendingIntent描述了封装Intent意图以及该意图要执行的目标操作。PendingIntent封装Intent的目标行为的执行是必须满足一定条件,只有条件满足,才会触发意图的目标操作。

一.获取PendingIntent对象

获取PendingIntent对象有以下几种方式:

  • PendingIntent.getActivity(Context, int, Intent, int):启动活动
  • PendingIntent.getActivities(Context, int, Intent[], int):启动多个活动,意图中为数组
  • PendingIntent.getBroadcast(Context, int, Intent, int):启动广播
  • PendingIntent.getService(Context, int, Intent, int):启动服务

参数说明:

  • Context:context上下文,PendingIntent启动活动的上下文
  • int:requestCode请求码 ,发送者发送的请求码
  • Intent:intent意图:要加载活动的意图
  • int:flags 标记

对于其中的标记可以定义为下列形式

  • FLAG_ONE_SHOT:PendingIntent对象仅使用一次;
  • FLAG_NO_CREATE:如果PendingIntent对象不存在则返回null
  • FLAG_CANCEL_CURRENT:如果PendingIntent对象已存在,则取消原有的对象,创建新的PendingIntent对象
  • FLAG_UPDATE_CURRENT:如果PendingIntent对象已存在,则保留原有的对象,修改原有对象的属性数据
  • FLAG_IMMUTABLE:PendingIntent对象是不可变的
  • FLAG_MUTABLE:PendingIntent对象是可变的
  • 另外其他Intent中支持的标记都可以在标记参数中使用。

二、应用实例

例如:在MainActivity启动前台服务播放音乐,利用前台服务的通知提供的内容跳转到其他活动例如SongActivity介绍歌曲。界面如下所示。
在这里插入图片描述
点击第一张图的播放,会播放音频,同时发布通知如第二张图所示。在第二张图的红色箭头区域点击,可以屏幕会跳转到第三张图。在第三张图中点击“返回”,则返回主活动。

1. AndroidManifest.xml清单配置权限

  <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /><uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" /><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />

2. 定义MusicService

class MusicService : Service() {lateinit var mediaPlayer: MediaPlayeroverride fun onCreate() {super.onCreate()mediaPlayer = MediaPlayer.create(this,R.raw.song3)}override fun onBind(intent: Intent): IBinder? {postNotification()playMusic()return null}override fun onUnbind(intent: Intent?): Boolean {stopMusic()return super.onUnbind(intent)}/*** 播放音乐*/private fun playMusic(){mediaPlayer.setOnPreparedListener {mediaPlayer.start()}mediaPlayer.setOnCompletionListener {mediaPlayer.release()}}/*** 停止播放*/private fun stopMusic(){if(mediaPlayer.isPlaying){mediaPlayer.stop()mediaPlayer.release()}}/*** 创建通知渠道* @param id String* @param name String*/private fun createNotificationChannel(id:String,name:String){//创建通知管理器val notificationManager =getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager//定义通知渠道val channel = NotificationChannel(id,name,NotificationManager.IMPORTANCE_DEFAULT)//创建通知渠道notificationManager.createNotificationChannel(channel)}/*** 发布通知*/private fun postNotification(){if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O) {createNotificationChannel("music_service","歌曲")}//定义跳转SongActivity的PendingIntentval descPendingIntent = getSongPendingIntent()//定义启动控制音乐播放广播接受器的PendingIntentval playPendingIntent = getPlayPendingIntent()//定义启动控制音乐停止播放广播接受器的PendingIntentval stopPendingIntent = getStopPendingIntent()//定义动作val playAction = NotificationCompat.Action(android.R.drawable.ic_media_play,"播放",playPendingIntent)val stopAction = NotificationCompat.Action(android.R.drawable.ic_media_pause,"停止",stopPendingIntent)//创建通知val notification = NotificationCompat.Builder(this,"music_service").apply{setOngoing(true)setOnlyAlertOnce(true)setContentTitle("播放音乐")setContentText("正在播放歌曲...")setSmallIcon(R.mipmap.ic_launcher)setColorized(true)color = resources.getColor(R.color.teal_200,null)setContentIntent(descPendingIntent)//            addAction(android.R.drawable.ic_media_play,"播放",playPendingIntent) //android23开始不支持
//            addAction(android.R.drawable.ic_media_pause,"停止",stopPendingIntent)//android23开始不支持addAction(playAction)addAction(stopAction)}.build()startForeground(1,notification)}/*** 跳转到歌曲介绍的界面* @return PendingIntent*/private fun getSongPendingIntent():PendingIntent{//定义启动服务的意图val intent = Intent(this,SongActivity::class.java)//定义PendingIntentreturn PendingIntent.getActivity(this,1,intent,PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE)}private fun getPlayPendingIntent(): PendingIntent {//创建意图过滤器val intentFilter = IntentFilter()//增加动作intentFilter.addAction("PLAY_ACTION")//创建音乐播放广播接受器val playReceiver = object: BroadcastReceiver(){override fun onReceive(context: Context?, intent: Intent?) {playMusic()}}//注册播放音乐广播器registerReceiver(playReceiver,intentFilter)//创建播放意图val intent = Intent("PLAY_ACTION")return PendingIntent.getBroadcast(this,2,intent,PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)}private fun getStopPendingIntent():PendingIntent{//创建意图过滤器val intentFilter = IntentFilter()//增加动作intentFilter.addAction("STOP_ACTION")//创建停止播放广播接受器val stopReceiver = object: BroadcastReceiver(){override fun onReceive(context: Context?, intent: Intent?) {stopMusic()}}//注册广播接收器registerReceiver(stopReceiver,intentFilter)//创建意图val intent = Intent("STOP_ACTION")return PendingIntent.getBroadcast(this,3,intent,PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)}
}

3.定义主活动MainActivity

class MainActivity : ComponentActivity() {lateinit var intent1:Intentval conn = object:ServiceConnection{override fun onServiceConnected(name: ComponentName?, service: IBinder?) {}override fun onServiceDisconnected(name: ComponentName?) {}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)intent1 = Intent(this,MusicService::class.java)requestNotificationPermission()setContent {Lab03Theme {// A surface container using the 'background' color from the themeSurface(modifier = Modifier.fillMaxSize(),color = MaterialTheme.colorScheme.background) {MainScreen(playAction=::playMusic,stopAction=::stopMusic)}}}}/*** 请求通知权限*/private fun requestNotificationPermission(){if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.TIRAMISU) {ActivityCompat.requestPermissions(this,arrayOf(android.Manifest.permission.POST_NOTIFICATIONS),0)}}/*** 绑定播放音频的服务*/private fun playMusic(){bindService(intent1,conn, Context.BIND_AUTO_CREATE)}/*** 解除绑定*/private fun stopMusic(){unbindService(conn)}
}@Composable
fun MainScreen(playAction:()->Unit,stopAction:()->Unit) {Column(horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.Center){Row{TextButton(onClick = {playAction.invoke()}){Row{Icon(imageVector = Icons.Filled.PlayArrow,contentDescription = "play")Text("播放")}}TextButton(onClick = {stopAction.invoke()}){Row{Icon(imageVector = Icons.Filled.Stop,contentDescription = "play")Text("停止")}}}}
}

4.定义显示歌曲介绍的SongActivity

class SongActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent{Column{Text("正在播放歌曲,歌曲介绍内容描述暂时没有定义")TextButton(onClick = {//结束当前活动finish()}){Text("返回")}}}}
}

参考文献

1.PendingIntent
https://developer.android.google.cn/reference/android/app/PendingIntent

http://www.15wanjia.com/news/178017.html

相关文章:

  • 怎么让网站收录做dj网站用什么建站系统比较好
  • 苏州网站建设系统价格合理网站开发项目经理主要工作
  • 我为本公司想建个网站vue网站开发教程
  • 我自己的网站怎么做关键词优化揭阳建设局网站
  • 做网站的logo网站制作源码
  • 新氧整形网站开发模版自己做的网站别人怎么上网找到
  • 马尾区建设局网站wordpress库存插件
  • 网站建设的需求要素域名提供商
  • 网站备案流程图品牌营销传播
  • 网站是用什么程序做的开小厂一年赚50万
  • 微信官网免费下载seo模拟点击工具
  • 没网站怎么做京东联盟无锡网络公司找哪家
  • 网站制作详细教程wordpress查看jquery版本
  • 网站开发评估与调整海口企业网站开发
  • html5 网站自适应淘宝网页制作教程
  • 吴江开发区建设局网站深圳外贸网站建设制作
  • 建设一个网站要多少钱上永远的吗网站pv uv
  • 企业网站建立制作佛山网站建设凤软
  • 长治门户网站网页制作网站首页
  • 怎么向百度提交网站wordpress做后端
  • 大型网上商城兰州优化定制
  • 外贸添加外链网站福田祥菱m2怎么样
  • 遂昌赶街网站沈阳网 沈阳网站
  • 做网站1万多湛江论坛
  • 网站开发流程心得体会网站开发属于什么大学专业
  • 如何确定网站栏目全国建设造价信息网站
  • 卢松松外链工具东莞做网站seo优化
  • 响应式网站的特点搜索引擎友好的网站有哪些特点
  • 广德网站开发怎么做死循环网站
  • 站内优化包括哪些卖域名的网站要怎么做