zoukankan      html  css  js  c++  java
  • android targetSdkVersion>=26收不到广播的处理

    背景:GP新政策,要求Google Player上架应用的targetSdkVersion>=26。

    一、 为啥GP要求targetSdkVersion>=26?

    1 targetSdkVersion是啥?有什么作用?

    targetSdkVersion是App在打包时可以指定的一个参数。跟一台设备执行哪个版本的代码有关。

    举例:

    我们都知道android 6.0(api level 23)上有了权限验证机制,比如获取地理位置信息。现在有一台6.0的设备,我们却可以在上面不需要用户授权就获取此权限。具体操作:打包时将targetSdkVersion设置<23即可,因为源码里面会判断ApplicationInfo里的targetSdkVersion,如果小于23的话,是不需要授权的。

    2 GP为什么出这个新政策?

    • 为了解决新设备上还是跑旧API的漏洞。
    • 其它原因,比如给设备省电等。

    android里面广播分为粘性广播(sticky)和非粘性广播,非粘性广播时即时的,粘性广播有缓存时间。
    举例:

    一个部门在开会,主管公布了一个消息,今晚聚餐。这时有人迟到了,主管表示公布完五分钟内到达的人,会跟他们再讲这个消息。这就是粘性广播。
    后面迟到的人不会知道这个消息。这就是非粘性广播。

    targetSdkVersion>26的话,在manifest里面注册的粘性广播,将不能收到。

    二、解决方案

    官方解决方案

    广播动态注册。

    示例:

            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
            intentFilter.addDataScheme("package");
            context.registerReceiver(new PackageBroadcastReceiver(), intentFilter);
    

    其他解决方案

    有一种场景是,SDK开发,用户没有初始化你,但你必须要自己跑起来。
    此时有两种解决办法:

    • manifest注册非粘性广播
      示例:
            <receiver android:name="com.test.PackageBroadcastReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
                    <data android:scheme="package" />
                </intent-filter>
            </receiver>
    
    • manifest注册ContentProvider
      示例:
            <provider
                android:name="com.test.TestContentProvider"
                android:authorities="${applicationId}" />
    

    然后在ContentProvider的onCreate()方法里做你要的操作就可以了。

  • 相关阅读:
    .Net程序破解
    SyntaxHighlighter插件测试
    Executing SQL using an ArcSDE connection
    VisualSVN增加密码php修改页面
    SyntaxHighlighter插件测试
    Executing SQL using an ArcSDE connection
    VisualSVN增加密码php修改页面
    FreeTextBox增加表情和代码着色功能
    找到了一篇用户角色处理的好文章
    男人25岁前的忠告
  • 原文地址:https://www.cnblogs.com/diffx/p/9541154.html
Copyright © 2011-2022 走看看