ndroid 8.0中修改NotificationChannel 属性,升级app后该修改不生效,必须卸载app重新安装才能生效,原代码如下: public void notifyDownloading...pendIntent); mNotifyManager.notify(NOTIFY_ID, mBuilder.build()); } 这里将IMPORTANCE_HIGH修改为IMPORTANCE_LOW,通过Android
:name=".receiver.MyWidget" > android:name="android.appwidget.action.APPWIDGET_UPDATE..." /> <meta-data android:name="android.appwidget.provider" android:resource="@xml...> appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp..." android:minHeight="72dp" android:updatePeriodMillis="86400000" //指定更新的间隔时间,最小为半个小时,一般不用它更新,都是自己更新...example_appwidget"//设置这个小控件的布局文件 android:configure="com.example.android.ExampleAppWidgetConfigure" /
Android 12 更新了已有的 Widget API,重塑了微件的设计来契合 "Material You" 设计语言。...△ 对比更新之前 (Android 11) 和更新后的浅色和深色主题 (Android 12) 在这个系列中,我们将带您更新微件来适配 Android 12。... Preview Subject 创建预览主题后,..." ... /> △ 微件描述 总结 在本文中,我们为您展示了如何更新微件设计并且在微件选择器中提供更好的用户体验。...上述内容可以快速更新您的微件来适配 Android 12,您的用户可以看到非常直观的区别。 但这并不是全部。
学习内容 手机桌面管理的技巧 如何实现实时壁纸 如何创建快捷方式 如何创建桌面小控件 如何创建文件夹 能力目标 了解手机桌面管理的技巧 熟练掌握如何实现实时壁纸 熟练掌握如何创建快捷方式...熟练掌握如何创建桌面小控件 熟练掌握如何创建文件夹 本章简介 Android被认为是新一代的移动操作系统,它与传统的移动操作系统存在很大的区别。...> appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth...-- 将该BroadcastReceiver当成桌面小控件 --> android:name="android.appwidget.action.APPWIDGET_UPDATE...-- 指定桌面小控件的meta-data --> <meta-data android:name="android.appwidget.provider" android
经常看到一些教程教你如何写appwidget,但是,你知道你的appwidget是如何被添加到桌面上的吗? 一般的,如果是做桌面的童鞋,基本上都会让自己的桌面支持appwidget。...下面说说如何实现。 首先是得定义一个承载appwidget的容器,系统的Launcher里面是用的CellLayout,实现的很不错。...; import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo...android.view.View; import android.view.View.OnLongClickListener; /** * 添加appwidget * @author chroya...必须调用AppWidgetHost的startListening方法来监听appwidget的状态变化,否则添加上去的appwidget不会更新的。 2。
但是从 Android 推出至今,AppWidget 的 API 基本就没有什么大的变化,从 2012 年到 2021 年更是只有一个 Android 版本包含了对 AppWidget API 的更新。...而随着 Android 12 的推出,也带来了 Widget API 一些亟需改进的更新。...API Android 12 的推出带来了很多关于 AppWidget API 的更新,本文不会对所有的 API 一一介绍,而是重点介绍几个对 Widget 构建非常有用的 API。...那么如何做到让 Widget 随着尺寸的变化而动态更新显示内容呢,用如下代码举例,我们定义了三个不同的参数,分别包含最小支持宽度和高度,以及在此大小范围内对应的 RemoteView,系统会自动根据实际的尺寸而自动对...△ Glance 结构示意图 接下来我们介绍如何使用 Glance 构建 Widget,首先仍需要像之前一样声明 AppWidget,并在 AndroidManifest 中将其链接到接收器,当然,我们在这里使用了
本文是 "更新 Android 12 中 widget" 系列的第二篇文章。在上一部分 我们探讨了通过一些简单的方法,为 APP 用户呈现出非常显性的视觉更新。...xml/app_widget_info_checkbox_list.xml appwidget-provider android:configure="com.example.android.appwidget.ListWidgetConfigureActivity...xml/app_widget_info_checkbox_list.xml appwidget-provider android:configure="com.example.android.appwidget.ListWidgetConfigureActivity...当定义了 targetCellWidth 和 targetCellHeight 属性后,搭载 Android 12 的设备将使用这些属性,而非 minWidth 和 minHeight。...现在您已经在这篇文章中了解到可配置的、新的或是改进中的 API,请查阅我们之前的推文《更新您的 widget 以适配 Android 12》,了解更新 widget 设计以及在 widget picker
https://developer.android.com/reference/android/appwidget/AppWidgetManager#requestPinAppWidget(android.content.ComponentName...应用内主动更新Widget 前面我们提到了,当App活着的时候,可以主动来更新Widget,而且有两种方式可以实现,一种是通过广播ACTION_APPWIDGET_UPDATE,触发Widget的update...) updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) sendBroadcast(updateIntent) 这种方式的本质就是发送更新的广播...remoteViews.setTextViewText(R.id.title, widgetData.xxx) 再比如点击后刷新Widget,实际上就是创建一个PendingIntent。...如何进行后台请求 Widget在后台进行更新时,通常会请求网络,然后根据返回数据来修改Widget的数据展示。
google提供了一种能使Android系统直接通过网站地址打开应用程序对应内容页面,而不需要用户选择使用哪个应用来处理网站地址的方式,即Android App Links,其工作流程如下: 图1 短信触达工作流程...随着Android系统使用体验的不断升级,通知开关的管控越来越严格,在一些系统上APP安装后默认情况下仅弹窗提醒一次,也有一些系统默认情况下通知开关为关闭装态。...②设置appWidget 的基本属性 AppWidgetProviderInfo定义了widget的基本特性,如应用微件的最小布局尺寸、应用微件的初始布局资源、应用微件的更新频率,以及(可选)在应用微件创建时启动的配置..., RemoteViews) 来使用 RemoteViews 布局更新应用微件 最后,创建返回 Intent,为其设置 Activity 结果,然后结束该 Activity 设置预览图片,在选择创建appWidget...④如何制定更新策略 系统为了避免小组件过多的占用资源,默认拒绝频繁更新,设置了最短更新时间为30分钟;这种默认的刷新方式不太适合交互类型的小组件,存在用户操作完以后页面状态不同步的问题,那这个问题如何解决呢
> appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout...4.在AndroidManifest.xml文件中声明小部件 下面的示例中包含了两个action,第一个action用于识别小部件的单击行为,而第二个action是作为小部件必须存在的action android.appwidget.action.APPWIDGET_UPDATE...android:name=".MyAppWidgetProvider" > <meta-data android:name="android.appwidget.provider...android:name="com.ryg.chapter_5.action.CLICK" /> android:name="android.appwidget.action.APPWIDGET_UPDATE...对于通知栏消息来说,那些被cancel的通知单击后将无法打开。
允许应用告诉AppWidget哪个应用能够访问该AppWidget的数据 BIND_DEVICE_ADMIN 必须通过关机接收者的请求来确保只有系统能够与之交互 BIND_INPUT_METHOD... 允许应用清除所有安装在设备上的应用的缓存 CLEAR_APP_USER_DATA 允许应用清除使用者的信息资料 CONTROL_LOCATION_UPDATES 允许从广播设备来更新或不更新本地的消息...开发应用程序时, 1.1 如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: android:name=”android.permission.INTERNET...:name="android.permission.ACCESS_FINE_LOCATION" /> 1.5 允许应用程序访问额外的位置提供命令(Allows an application to access...android:name="android.permission.ADD_SYSTEM_SERVICE" /> 2.1 允许程序更新手机电池统计信息(Allows
默认的样式太丑,如何自定义布局呢?让我们的布局更丑的清新脱俗呢? ?...> appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout...<meta-data android:name="android.appwidget.provider" android:resource...:name="android.appwidget.action.APPWIDGET_UPDATE" /> android:name="com.ssy.mywidgettest.action.CLICK...3、内部实现上是RemoteView的apply或者reapply方法更新界面。 apply和reapply的区别在于apply加载并更新。reapply只是更新。
又比如,安卓系统有一个广播叫做:BOOT_COMPLETED,是系统启动后发出的,APP 可以根据这个广播来设置开机自启动 基本广播接收器 来通过一个播客 APP 看一下广播接收器:de.danoeh.antennapod...ACTION_SP_APPS_QUERY_FEEDS_REPSONSE_FEEDS_EXTRA 数据(feeds)如果有则提取订阅列表数据,然后用 FeedDatabaseWriter.updateFeed 更新订阅...intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); sendBroadcast(intent); } }); 可以看到当点击按钮后虽然有广播但是禁止调用了...,这是安卓 8 中引入的新机制,为了节省电量限制了隐式的广播传递到应用程序 可以通过指定确切的目标来变成显示的广播,这样系统就会传递这个广播给播客 APP 了,因为不会唤醒很多个程序,只针对这一个应用程序...:name=".HiJackReceiver" android:enabled="true" android:exported="true"> 此时会提示你新建一个类
允许一个应用程序添加语音邮件系统 010 BATTERY_STATS 允许程序更新手机电池统计信息 011 BIND_ACCESSIBILITY_SERVICE 请求accessibilityservice...服务,以确保只有系统可以 绑定到它 012 BIND_APPWIDGET 允许程序告诉appWidget服务需要访问小插件的数据库, 只有非常少的应用才用到此权限 013 BIND_CARRIER_MESSAGING_SERVICE...这不是第三方应用程序可用 034 BODY_SENSORS 允许应用程序访问用户使用的传感器来测量他/她的 身体内发生了什么,如心率仪 035 BROADCAST_PACKAGE_REMOVED 允许程序广播一个提示消息在一个应用程序包已经移除后...请求系统管理员接收者receiver,只有系统才能使用 130.android.permission.BIND_APPWIDGET允许程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限...,显示系统窗口 更新设备状态 android.permission.UPDATE_DEVICE_STATS,更新设备状态 使用证书 android.permission.USE_CREDENTIALS,
,也就是说,插件可以提供一种动态扩展能力,使得应用程序在运行时加载原本不属于该应用的功能,并且做到动态更新和替换。...那么为何要使用插件化技术,它有何优势,能给我们带来什么样好处,这里简单列举了以下几点: 让用户不用重新安装 APK 就能升级应用功能,减少发版本频率,增加用户体验。...插件化有个增量更新的概念,如何下载一个增量包,从本地具体哪个位置取出一个包,这个包的具体命名规则是什么,等等。这些细节都必须要清楚明白。 第四,是 App 的启动流程。...第三种方法,就是打包后,执行一个脚本,修改生成包中资源id。 第六点,在实施插件化后,如何解决不同插件的开发人员的工作区问题。比如,插件1和插件2,需要分别下载哪些代码,如何独立运行?...资源分段:由于 Android 资源的格式是 0xPPTTNNNN ,PP 是包 ID ,00-02 是属于系统,7f 属于应用程序,03-7e 则保留,可以在这个范围内做文章 , TT 则是 Type
Android权限主要用于限制应用程序内部某些具有限制性特性的功能使用以及应用程序之间的组件访问。...更新设备状态 使用证书 android.permission.USE_CREDENTIALS 允许程序请求验证从AccountManager 使用SIP视频 android.permission.USE_SIP...允许程序使用SIP视频服务 使用振动 android.permission.VIBRATE 允许振动 唤醒锁定 android.permission.WAKE_LOCK 允许程序在手机屏幕关闭后后台进程仍然运行...** 账户管理 android.permission.ACCOUNT_MANAGER 获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问的权限 绑定小插件 android.permission.BIND_APPWIDGET...允许一个程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限 绑定设备管理 android.permission.BIND_DEVICE_ADMIN 请求系统管理员接收者
参数讲解 app_path:应用程序的本地或者远程路径 options:其他参数【只针对Android】,如下 replace:如果设备上已经存在该 app,是否重新安装/升级该软件包,默认True...allowTestPackages:是否允许安装清单中标记为test的软件包,默认False useSdcard:是否使用sd卡安装app,默认False grantPermissions:安装完成后是否自动授予...Android 6+上的应用程序权限,默认False 源码解析 ?...如果方法有可传参数字典 options,则加多了一个步骤,更新data 字典数据,把options 传进去 remove_app(self: T, app_id: str, **options: Any...) 作用 从设备中删除指定的应用程序 参数讲解 app_id:需要删除的应用程序ID options:其他参数,如下 keepData:卸载后是否保留应用程序数据和缓存,默认False timeout
ACCOUNT_MANAGER相关信息 android.permission.BATTERY_STATS 电量统计 获取电池电量统计信息 android.permission.BIND_APPWIDGET...绑定小插件 允许一个程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限 android.permission.BIND_DEVICE_ADMIN 绑定设备管理 请求系统管理员接收者...连续广播 允许一个程序收到广播后快速收到下一个广播 android.permission.BROADCAST_WAP_PUSH WAP PUSH广播 WAP PUSH服务收到后触发一个广播 android.permission.CALL_PHONE...安装应用程序 允许程序安装应用 android.permission.INTERNAL_SYSTEM_WINDOW 内部系统窗口 允许程序打开内部窗口,不对第三方应用程序开放此权限 android.permission.INTERNET...显示系统窗口 显示系统窗口 android.permission.UPDATE_DEVICE_STATS 更新设备状态 更新设备状态 android.permission.USE_CREDENTIALS
所以我们重新安装了我们的安装程序,现在只需下载和解压缩安装档案即可支持安装beta2:Windows,macOS和Linux。...我们现在使用底层平台(Android,iOS)所期望的结构来放置资产。这具有许多优点。 首先,由于我们不需要提取资源,所以Flutter应用程序现在可以更快地启动。...接下来考虑应用程序如何使用此列表: 由于对待办事项列表项目的访问是有条件的,所以错误会在晚些时候发生。...要开始升级,请确保将Flutter SDK更新为beta 2(v0。 2.8)以及用于Android Studio,IntelliJ或VS代码的Flutter IDE插件到最新版本。...然后,请参阅我们突破性变更后的全面指导,了解如何解决使用Dart 2中新的,更全面的运行时类型检查可能会遇到的问题。 如果您需要多一点时间才能完成此操作,则可以使用Dart 2退出暂时切换回旧的行为。