Android app的变化可以通过广播监听。广播监听方式分为两种(kotlin)
广播的action可以使用系统定义的,也可以使用自定义的,只需要保证监听的action统一即可
方式一:动态注册广播服务registerReceiver
//action 表示监听动作,如果是有序广播则需要设置priority 优先级
var filter = IntentFilter()
//filter.priority = 100
filter.addAction("com.unity3d.testkotlin.MyBroadcastRecver")
//filter.addDataScheme("package")
registerReceiver(MyBroadcastRecver(),filter)
方式二:静态注册,app安装即可监听
<receiver android:name=".MyBroadcastRecver"
android:exported="true"
android:enabled="true" >
<intent-filter>
<action android:name="com.unity3d.testkotlin.MyBroadcastRecver" />
</intent-filter>
</receiver>
消息监听处理器
class MyBroadcastRecver:BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
//TODO("Not yet implemented")
if(intent != null){
//var packagename = intent.dataString
//dataString的格式是package:xxxx,真正的包名为intent.data.schemeSpecificPart
var uriData = intent.data
Toast.makeText(context, intent.action +intent.dataString , Toast.LENGTH_SHORT).show()
Log.i("Demo","MyBroadcastRecver,action:${intent.action},${uriData!!.schemeSpecificPart}")
}
}
}
所以如果我们需要监听app变化则可以通过监听action事件
//动态方式
//必须增加DataScheme,否则接收不到消息
filter.addAction(Intent.ACTION_PACKAGE_CHANGED)
filter.addAction(Intent.ACTION_PACKAGE_REMOVED)
filter.addAction(Intent.ACTION_PACKAGE_ADDED)
filter.addDataScheme("package")
//静态方式
//必须增加android:scheme="package",否则接收不到消息
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
安装app不运行,此时卸载某app,则可以收到如下通知