注,这篇文章是于 2023 年 6 月 15 日从最早期的 WordPress 博客迁移来的,主要是记录(证明)一下小时候折腾的各种事情吧((逃
CyanogenMod提供一些API,我们今天主要探索它的自定义磁贴。
自定义磁贴类似于通知,需要build,publish等操作,而且发布自定义磁贴需要常驻后台。
配置项目 #
项目的配置很简单,只需要在app级build.gradle加入依赖即可
dependencies {
……
compile ‘org.cyanogenmod:platform.sdk:2.0’
}
随后点击AndroidStudio工具栏按钮同步Gradle:
最后在需要的地方引用包:
import cyanogenmod.app.CMStatusBarManager;
import cyanogenmod.app.CustomTile;
Build一个磁贴 #
如同Notification Builder,CM磁贴也有一个极其类似的builder:
CustomTile.Builder builder = new CustomTile.Builder(context);
builder提供一些方法来自定义你的磁贴,CyanVibrate 项目使用了这些方法:
- setIcon 设置图标
- setOnClickIntent 设置磁贴被点击时的PendingIntent
- setLabel 设置磁贴文字
- shouldCollapsePanel 设置磁贴点击后是否收起通知栏,默认true
- setOnSettingsClickIntent 设置 更多设置 按钮被点击时的Intent
我们主要讲讲较为复杂的setOnClickIntent。
setOnClickIntent——点击事件 #
由于是PendingIntent,我采用的是发送广播的方式,即“点击磁贴,发送广播,接收广播,启动震动服务”
首先,初始化一个Intent,设置Action:
Intent intent = new Intent();
intent.setAction(ACTION);
随后,调用setOnClickIntent方法设置点击intent:
builder.setOnClickIntent(PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
最后,创建一个广播接收器接收你发出的Intent。
创建完builder,使用builder.build()方法生成磁贴。
发布磁贴 #
生成完之后,发布磁贴:
CMStatusBarManager.getInstance(context).publishTile(TAG, ID, customTile);
如同通知,它也需要一个TAG和ID,用于识别不同磁贴,并提供取消磁贴的方法。
执行上述语句之后,拉下快速设置面板,即可看到你的磁贴了。
提示 #
在接收器的onReceive中判断Action时,最好使用 ACTION常量.equals(intent.getAction()),不要使用intnet.getAction().equals(ACTION常量)。