快速搭建直播平台,主页面添加一个常亮按钮
快速搭建直播平台,主页面添加一个常亮按钮实现的相关代码
AndroidManifest.xml
1 | <service<br> android:name= ".systemui.KeepScreenOnTileService" <br> android:icon= "@drawable/toggleon" <br> android:label= "屏幕常亮" <br> android:permission= "android.permission.BIND_QUICK_SETTINGS_TILE" ><br> <intent-filter><br> <action android:name= "android.service.quicksettings.action.QS_TILE" /><br> </intent-filter><br> </service> |
KeepScreenOnTileService.java
1 | public class KeepScreenOnTileService extends TileService {<br> private String TAG = "KeepScreenOnTileService" ;<br> private RemoteViews mRemoteViews;<br> private SharedPreferences mSharedPreferences;<br> private Intent mServiceIntent;<br> private static final String ACTION_KEEP_SCREEN_ON_DISABLED = "com.samsung.systemui.action.KEEP_SCREEN_ON_DISABLED" ;<br> private NotificationManager mNotificationManager;<br> private static final int KEEPSCREEN_ON_NOTIFICATION = 0x1234;<br> @Override<br> public void onCreate() {<br> super.onCreate();<br> mSharedPreferences = getSharedPreferences( "user" , Context.MODE_PRIVATE);<br> mServiceIntent = new Intent();<br> mServiceIntent.setClassName( "com.zw.myandroid" , "com.zw.myandroid.systemui.KeepScreenOnService" );<br> mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);<br> IntentFilter filter = new IntentFilter();<br> filter.addAction(ACTION_KEEP_SCREEN_ON_DISABLED);<br> registerReceiver(mReceiver, filter, null, null);<br> }<br> // 当用户从Edit栏添加到快速设定中调用<br> @Override<br> public void onTileAdded() {<br> }<br> // 当用户从快速设定栏中移除的时候调用<br> @Override<br> public void onTileRemoved() {<br> }<br> // 点击图标的时候<br> @Override<br> public void onClick() {<br> handleStatusChanged();<br> boolean isKeepScreenOn = mSharedPreferences.getBoolean("keep_screen_on", false);<br> mServiceIntent.putExtra("keep_screen_on", isKeepScreenOn);<br> startService(mServiceIntent);<br> }<br> // 打开下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用<br> // 在onTileAdded之后会调用一次<br> @Override<br> public void onStartListening() {<br> Tile tile = getQsTile();<br> if (tile == null) {<br> return;<br> }<br> boolean isKeepScreenOn = mSharedPreferences.getBoolean("keep_screen_on", false);<br> Log.d(TAG, "isKeepScreenOn:" + isKeepScreenOn);<br> tile.setState(isKeepScreenOn ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);<br> tile.updateTile();<br> }<br> // 关闭下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用<br> // 在onTileRemoved移除之前也会调用移除<br> @Override<br> public void onStopListening() {<br> Log.d(TAG, "onStopListening");<br> }<br> // 详细信息页面-RemoteViews<br> @Override<br> public RemoteViews semGetDetailView() {<br> Log.d(TAG, "semGetDetailView");<br> mRemoteViews = new RemoteViews(this.getPackageName(), R.layout.tile_customer);<br> boolean isKeepScreenOn = mSharedPreferences.getBoolean("keep_screen_on", false);<br> mRemoteViews.setTextViewText(R.id.textView, "开关状态" + isKeepScreenOn);<br> mRemoteViews.setTextColor(R.id.textView, Color.BLACK); //需要设置颜色,不然文字看不清<br> return mRemoteViews;<br> }<br> // 更改状态,刷新快捷按钮和详细信息<br> private void handleStatusChanged() {<br> Tile tile = getQsTile();<br> if (tile == null) {<br> return;<br> }<br> boolean isKeepScreenOn = mSharedPreferences.getBoolean("keep_screen_on", false);<br> updateNotification(!isKeepScreenOn);<br> Editor editor = mSharedPreferences.edit();<br> editor.putBoolean("keep_screen_on", !isKeepScreenOn);<br> editor.commit();<br> tile.setState(isKeepScreenOn ? Tile.STATE_INACTIVE : Tile.STATE_ACTIVE);<br> tile.updateTile();<br> semUpdateDetailView();<br> }<br> @Override<br> public CharSequence semGetDetailViewTitle() {<br> return "屏幕常亮";<br> }<br> @Override<br> public Intent semGetSettingsIntent() {<br> Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));<br> return intent;<br> }<br> //详细信息是否有开关<br> @Override<br> public boolean semIsToggleButtonExists() {<br> return true;<br> }<br> //详细信息开关点击事件<br> @Override<br> public void semSetToggleButtonChecked(boolean checked) {<br> super.semSetToggleButtonChecked(checked);<br> handleStatusChanged();<br> semUpdateDetailView();<br> }<br> //详细信息开关初始化<br> @Override<br> public boolean semIsToggleButtonChecked() {<br> boolean isKeepScreenOn = mSharedPreferences.getBoolean("keep_screen_on", false);<br> return isKeepScreenOn;<br> }<br> @Override<br> public CharSequence semGetDetailViewSettingButtonName() {<br> return null;<br> }<br> //启用禁用自定义快捷方式,不会自动刷新<br> public static void setTilesEnabled(Context context, boolean enable) {<br> final PackageManager pm = context.getPackageManager();<br> String ACTIVITY_NAME = "com.zw.myandroid.systemui.KeepScreenOnTileService";<br> String PKG_NAME = "com.zw.myandroid";<br> ComponentName cn = new ComponentName(PKG_NAME, ACTIVITY_NAME);<br> pm.setComponentEnabledSetting(cn, enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED<br> : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);<br> }<br> private final BroadcastReceiver mReceiver = new BroadcastReceiver() {<br> @Override<br> public void onReceive(Context context, Intent intent) {<br> String action = intent.getAction();<br> if (ACTION_KEEP_SCREEN_ON_DISABLED.equals(action)) {<br> handleStatusChanged();<br> }<br> }<br> };<br> //发送或者删除通知<br> private void updateNotification(boolean enabled) {<br> if (enabled) {<br> Intent intent = new Intent();<br> intent.setAction(ACTION_KEEP_SCREEN_ON_DISABLED);<br> PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);<br> Notification.Builder builder = new Notification.Builder(this);<br> builder.setSmallIcon(R.drawable.toggleon).setVisibility(Notification.VISIBILITY_PUBLIC)<br> .setContentTitle("保持屏幕常亮").setShowWhen(false)<br> .setOngoing(true).addAction(0, "关闭", pendingIntent);<br> mNotificationManager.notify(KEEPSCREEN_ON_NOTIFICATION, builder.build());<br> } else {<br> Log.d(TAG, "cancelNotification!!!");<br> mNotificationManager.cancel(KEEPSCREEN_ON_NOTIFICATION);<br> }<br> }<br>} |
以上就是快速搭建直播平台,主页面添加一个常亮按钮实现的相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现