当前位置:首页 » 安卓系统 » android屏幕广播

android屏幕广播

发布时间: 2023-04-16 17:25:52

1. 手机播放器如何投屏到电视上,更好地体验心仪的剧呢

首先要注意的是,所有截屏视频都需要在同一WiFi环境中使用手机和电视。如果电视不支持联网或WiFi,则不让亩郑允许这样做。

您还可以使用第三方屏幕投射工具在屏幕上简单地显示软件,以便在手机和电视上安装应用程序细分和电视终端,并将这两个手机配对会将手机的内容发送到电视。根据我的经验,我认为它具有丰富的整体功能,但是由于延迟时间相当长,我建议所有人都使用前两种方法。

2. android 之广播机制

Android 中的广播主要可以分为两种类型:标准广播和有序广播

一种完全异步执行的广播,在广播发出之后,所有的BroadcastReceiver几乎会在同一时刻收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断

标准广播工作示意图:

一种同步执行的广播,在广播发出之后,同一时刻只会有一个BroadcastReceiver能够收到这条广播消息,当这个BroadcastReceiver中的逻辑执行完毕后,广播才会继续传递。所以此时的BroadcastReceiver是有先后顺序的,优先级高的BroadcastReceiver就可以先收到广播消息,并且前面的BroadcastReceiver还可以截断正在传递的广播,这样后面的BroadcastReceiver就无法收到广播消息了

有序广播工作示意图:

可以让程序在未启动的情况下接收广播

在Android 8.0系统之后,所有隐式广播都不允许使用静态注册的方式来接收了。隐式广播指的是那些没有具体指定发送给哪个应用程序的广播,大多数系统广播属于隐式广播,但是少数特殊的系统广播目前仍然允许使用静态注册的方式来接收,详见网址: https://developer.android.google.cn/guide/components/broadcast-exceptions.html

在 AndroidManifest.xml 文件中注册

在 AndroidManifest.xml 文件中进行权限声明

不要在 onReceive() 方法中添加过多的逻辑或者进行任何的耗时操作,因为BroadcastReceiver中是不允许开启线程的,当 onReceive() 方法运行了较长时间而没有结束时,程序就会出现错误

先定义一个BroadcastReceiver来准备接收此广播

在 AndroidManifest.xml 文件中注册

有序广播是一种同步执行的广播,并且是可以被截断的。为了验证这一点,我们需要再创建一个新的BroadcastReceiver。新建AnotherBroadcastReceiver

同样,在 AndroidManifest.xml 文件中注册,同时,使用 intent-filter 标签的 android:priority 属性设置优先级

前面的 AnotherBroadcastReceiver 的优先级比较高,因此 AnotherBroadcastReceiver 一定比 MyBroadcastReceiver 先收到广播,因此,可以在 AnotherBroadcastReceiver 的 onReceive 方法中使用 abortBroadcast() 方法截断广播,这样 MyBroadcastReceiver 就收不到该广播了

在界面上弹出一个对话框,让用户无法进行任何其他操作,必须点击对话框中的“确定”按钮,关闭所有的Activity,然后回到登录界面即可

ActivityCollector 类用于管理所有的Activity,具有关闭所有Activity的功能

创建 BaseActivity 类作为所有 Activity 的父类,并在里面实现强制下线功能,在这里实现此功能,有以下几点原因

创建一个LoginActivity来作为登录界面

activity_login.xml

LoginActivity 如果输入 123 就到 MainActivity界面

MainActivity 中点击强制下线按钮,就发送强制下线的广播

MainActivity 布局

3. android怎么接收屏幕开关广播

按理来收,你注册一个广播,然后在接收器里面就可以监听到。

4. android中的广播是什么意思

android的广播概念和我们日常生活中的电台有相通之处,空气中有不同频段,不同电台的广播,而android系统中就有对应的电池的电量,来电,短信还有例如sd卡拔插等等这些广播的消息发出,这些消息就对应着用收音机调频时,不同电台的节目。而我们注册的广播就类似于我收听某个电台的节目,比如一个注册广播收听交通广播,另一个注册的广播收听音乐广播,那么怎么区分是交通广播还是音乐广播呢,这就要通过前一章提到的Intent的action来判断。

5. Android系统广播(Broadcast)注册,发送,接收流程解析

以下广播简称Broadcast

   是Android四大组件之一,在四大组件的另外两个组件 和 拥有发送和接收广播的能力。Android 是在 进程间通信机制的基础上实现的,内部基于消息发布和订阅的事件驱动模型,广播发送者负责发送消息,广播接收者需要先订阅消息,然后才能收到消息。 进程间通信与 的区别在于:

   有三种类型

   存在一个注册中心,也可以说是一个调度中心,即 。广播接收者将自己注册到 中,并指定要接收的广播类型;广播发送者发送广播时,发送的广播首先会发送到 , 根据广播的类型找到对应的 ,找到后边将广播发送给其处理。

   这里以普通广播为例子, 接收者有两种注册方式,一种是 ,一种是 :

(广播的发送分为 两种,这里针对有序的广播) 中的android:priority=""和 中的IntentFilter.setPriority(int)可以用来设置广播接收者的优先级,默认都是0 , 范围是[-1000, 1000],值越大优先级越高,优先级越高越早收到。

   在相同优先级接收同个类型广播时, 的广播接收器比 的广播接收者更快的接收到对应的广播,这个之后会进行分析。

   注:以下源码基于rk3399_instry Android7.1.2

   的流程可分为 , 和 三个部分,这里依次分析下

   在Android系统的 机制中,前面提到, 作为一个注册和调度中心负责注册和转发 。所以 的注册过程就是把它注册到 的过程。

   这里我们分析 广播的过程, 和 有一个共同的父类 ,所以它们对应的注册过程其实是调用 ,接下来我们按照流程逐步分析调用流程的源码。

frameworks/base/core/java/android/content/ContextWrapper.java

   在之前的 Android应用程序启动入口ActivityThread.main流程分析 分析过,在我们启动 Activity 时会创建一个 对象,然后通过 传给我们启动的 ,其内部就会将该对象赋值给 ; 的 方法也是类似的赋值流程,这里放个简易的源码应该更好理解

   可以看到最后都会将生成的 对象赋值给对应的
对象。接下来继续分析 , 即 函数。

/frameworks/base/core/java/android/app/ContextImpl.java

   这里我们首先看下如何将广播接收者 封装成一个 接口的 本地对象
/frameworks/base/core/java/android/app/LoadedApk.java

   每一个注册过广播接收者的 或 组件在<font color='Crimson'> LoadedApk </font>类中都有个对应的 对象,该对象负责将 与 组件关联起来。这些对象,以关联的 作为关键字保存在一个 中。之后对应的 又以 的 作为关键字保存在 的成员变量 对象中。最后通过 对应的 方法获得其 接口的 本地对象。之后再回到 注册方法内,将 对象发给 进行注册。

/frameworks/base/core/java/android/app/ActivityManagerNative.java

/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

   在的 或 注册一个 时,并不是将其注册到<font color='OrangeRed'>AMS</font>中,而是将与它关联的<font color='OrangeRed'>InnerReceiver</font>对象注册到<font color='OrangeRed'>AMS</font>中,当<font color='OrangeRed'>AMS</font>接收到广播时,会根据 在内部找到对应的<font color='OrangeRed'>InnerReceiver</font>对象,然后在通过这个对象将这个广播发送给对应的 处理。

   注册过程这边画了一个简单的流程图:

   <font color='OrangeRed'>Broadcast</font>的发送过程可简单描述为以下几个过程:

frameworks/base/core/java/android/content/ContextWrapper.java

/frameworks/base/core/java/android/app/ContextImpl.java

/frameworks/base/core/java/android/app/ActivityManagerNative.java

/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

6. android怎么接收手机锁屏的广播

一下方法或设置均游禅未验证
==========
锁屏或黑屏会广播两个消息分别睁磨判是:ACTION_SCREEN_OFF和ACTION_SCREEN_ON
程序控制手机永远不锁屏或者永远亮光:通过设置View.setKeepScreenOn(boolean)的方悉改法可以永不锁屏

===========以下方法作者声称没有监听到该广播===========
public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals( "android.intent.action.SCREEN_OFF" )){
Toast.makeText(context, "bbbb", Toast.LENGTH_LONG).show();

}
}
xml文件中如下:
<receiver android:name="ServiceReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter>
</receiver>
================以下禁止锁屏方法未验证==============
在每个Activity的onCreate里面加上如下代码就可以了:
@Override
protected void onCreate(Bundle icicle){
super.onCreate(icicle);
getWindow();addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
转载:http://mycoding.iteye.com/blog/962625

7. android 怎样收到系统发送的广播

要注册接受广播的处理程序, 有两种方式

  1. 在AndroidManifest.xml重注册, 比如监听系统的开机广播和屏幕解锁广播
    <receiver android:name="com.bestjoy.app.common.update.BootCompletedReceiver" >
    <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>
    </receiver>
    这样, 一旦有定义的action发出来,BootCompletedReceiver的onReceive方法就会回调了,这样的监听,不需要你的app已经在运行。


2. 在程序中动态创建监听器, 比如还是解锁广播,

在Activity的onCreate()中生成一个IntentFilter对象

IntentFilter filter=new IntentFilter();
//为IntentFilter添加一个Action
filter.addAction("android.intent.action.USER_PRESENT");
bootCompletedReceiver = newUserPresentReceiver();

registerReceiver(smsReceiver, filter);
在onDestroy的时候去注册
unregisterReceiver(bootCompletedReceiver);
这样的方式只有在Activity生命周期onCreate()-onDestroy()之间有效。

对于一些特俗的系统级别的广播,即使你按照上面的任何一种方式做了, 也可能监听不到, 这是android 系统做了保护了, 网上查一下就知道了。

8. Android本地广播的使用

为了解决广播的安全性问题,Android引入了本地广播机制,使用该机制发出的广播只能在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

本地广播是无法通过静态注册的方式来接收的。我们知道静态注册主要是为了在程序未启动的情况下能接收广播,而当我们发送本地广播的时候,程序肯定是已经启动的了,所以我们需要动态注册方式创建接收器。
在这里我们创建一个继承于BroadcastReceiver的类LocalReceiver。onReceive()处理你接收到的广播内容,在这里我用Toast来创建一个提示接收到消息的弹窗

在activity_main.xml文件创建一个用于发送广播的按钮

首先通过本地广播管理器LocalBroadcastManager的getInstance()方法获取一个实例,并分别创建过滤器IntentFilter和自定义接收器LocalReceiver的实例。给IntentFilter的实例添加一个action:localbroadcast(接收的广播的名称),然后调用LocalBroadcastManager的registerReceiver()方法进行注册,并将LocalReceiver的实例和IntentFilter的实例都传进去。这样本地监听器就创建完成了。
调用LocalBroadcastManager的sendBroadcast()发送本地广播。运行程序,点击Send Button按钮,我们可以看到弹窗显示“This is in LocalReceiver”,说明本地广播发送和接收成功了。

当然,我们最后一定不要忘了取消注册。我们可以通过调用unregisterReceiver()方法来实现。至此,Android的标准广播发送就完成了。

1.发送的广播只能在本程序内传递,不必担心数据泄露
2.其它程序广播无法发送到本程序的内部,不必担心安全漏洞隐患
3.本地广播比系统全局广播更加高效

热点内容
手机可以换内置存储 发布:2024-05-17 20:31:37 浏览:744
泛型编程stl 发布:2024-05-17 20:26:34 浏览:933
传智播客php韩顺平 发布:2024-05-17 20:09:52 浏览:819
android蓝牙打印打印图片 发布:2024-05-17 18:58:31 浏览:464
android年龄 发布:2024-05-17 18:51:33 浏览:198
termux安装python 发布:2024-05-17 18:44:55 浏览:655
手机流量上传 发布:2024-05-17 18:44:06 浏览:551
服务器怎么证明是好的 发布:2024-05-17 18:39:28 浏览:683
树莓派如何搭建mqtt服务器 发布:2024-05-17 18:27:38 浏览:437
门口机sip服务器ip是什么 发布:2024-05-17 17:38:27 浏览:554