zoukankan      html  css  js  c++  java
  • Android 8.0(api27)静态广播和动态广播接收问题

    随着Android api版本的升级,Android当中的安全问题越来越被重视。

    以前广播,随便用,代码使用时几乎不会出问题。

    可到了Android 8.0,api 27,广播的时候和之前不同了,如果还用之前的使用方式,无法正常响应。

    具体使用方式如下:

    Android 8.0对广播进行了限制:静态广播(应用内)需要为Intent设置setClassName(String),动态广播需要为IntentFilter设置addAction(String)同时还要为Intent设置setAction(String),并且这两个字符内容必须一样。

    1.静态广播(应用内):必须设置setClassName(context, "包+类名")

    //广播接收者--MyBroadcastReceiver.java
    package com.example.administrator.testmvp.broadcast_receiver;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
        }
    }
    
    //注册静态广播--AndroidManifest.xml
    <receiver android:name=".broadcast_receiver.MyBroadcastReceiver"
        android:permission="true">
          <intent-filter>
             <action android:name="myBroadcastReceiver" />
          </intent-filter>
    </receiver>
    
    // 发送静态广播-MainActivity
    Intent intent = new Intent();
    intent.setAction("myBroadcastReceiver");
    String className = getPackageName() + ".broadcast_receiver.MyBroadcastReceiver";
    intent.setClassName(MainActivity.this, className);
    sendBroadcast(intent);

    2.动态广播:intentFilter.addAction(String)和intent.setAction(String)字符内容必须一样

    //广播接收者
    package com.example.administrator.testmvp.broadcast_receiver;
    
    public class DynamicBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
        }
    }
    
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
    // 注册动态广播
    registerReceiver(new DynamicBroadcastReceiver(), intentFilter);
    // 发送动态广播
    Intent intent = new Intent();
    intent.setAction("com.example.broadcasttest.MY_BROADCAST");
    sendBroadcast(intent);

    总结:随着Android api版本升级,安全性越来越被重视,除了广播,其他api的安全性有的也发生了变化。我们开发者要清楚该趋势,开发过程中要注意相关问题,避免出现问题。

  • 相关阅读:
    mybatis中resultMap配置细则
    关于mybatis中typeHandler的两个案例
    mybatis映射器配置细则
    mybatis常用配置
    初识mybatis(二)
    初识mybatis
    数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)
    交替方向乘子法(ADMM)的原理和流程的白话总结
    用ADMM求解大型机器学习问题
    数值优化(Numerical Optimization)学习系列-目录
  • 原文地址:https://www.cnblogs.com/endv/p/13424170.html
Copyright © 2011-2022 走看看