哪位91大神排名细数哪一位可以通过手机当前页面了解手机的种类

1.Android广播机制概述
Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:1.同一app内部的同一组件内的消息通信(单个或多个线程之间);
2.同一app内部的不同组件之间的消息通信(单个进程);
3.同一app具有多个进程的不同组件之间的消息通信;
4.不同app之间的组件之间消息通信;
5.Android系统在特定情况下与App之间的消息通信。
从实现原理看上,Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。因此,从实现的角度来看,Android中的广播将广播的发送者和接受者极大程度上解耦,使得系统能够方便集成,更易扩展。具体实现流程要点粗略概括如下:
1.广播接收者BroadcastReceiver通过Binder机制向AMS(Activity Manager Service)进行注册;
2.广播发送者通过binder机制向AMS发送广播;
3.AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
4.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。
&对于不同的广播类型,以及不同的BroadcastReceiver注册方式,具体实现上会有不同。但总体流程大致如上。
由此看来,广播发送者和广播接收者分别属于观察者模式中的消息发布和订阅两端,AMS属于中间的处理中心。广播发送者和广播接收者的执行是异步的,发出去的广播不会关心有无接收者接收,也不确定接收者到底是何时才能接收到。显然,整体流程与EventBus非常类似。
在上文说列举的广播机制具体可以使用的场景中,现分析实际应用中的适用性:
第一种情形:同一app内部的同一组件内的消息通信(单个或多个线程之间),实际应用中肯定是不会用到广播机制的(虽然可以用),无论是使用扩展变量作用域、基于接口的回调还是Handler-post/Handler-Message等方式,都可以直接处理此类问题,若适用广播机制,显然有些&杀鸡牛刀&的感觉,会显太&重&;
第二种情形:同一app内部的不同组件之间的消息通信(单个进程),对于此类需求,在有些教复杂的情况下单纯的依靠基于接口的回调等方式不好处理,此时可以直接使用EventBus等,相对而言,EventBus由于是针对统一进程,用于处理此类需求非常适合,且轻松解耦。可以参见文件《》。
第三、四、五情形:由于涉及不同进程间的消息通信,此时根据实际业务使用广播机制会显得非常适宜。下面主要针对Android广播中的具体知识点进行总结。
2.BroadcastReceiver
自定义BroadcastReceiver
自定义广播接收器需要继承基类BroadcastReceivre,并实现抽象方法onReceive(context, intent)方法。广播接收器接收到相应广播后,会自动回到onReceive(..)方法。默认情况下,广播接收器也是运行在UI线程,因此,onReceive方法中不能执行太耗时的操作。否则将因此ANR。一般情况下,根据实际业务需求,onReceive方法中都会涉及到与其他组件之间的交互,如发送Notification、启动service等。下面代码片段是一个简单的广播接收器的自定义:
1 public class MyBroadcastReceiver extends BroadcastReceiver {
public static final String TAG = "MyBroadcastReceiver";
public static int m = 1;
public void onReceive(Context context, Intent intent) {
Log.w(TAG, "intent:" + intent);
String name = intent.getStringExtra("name");
Log.w(TAG, "name:" + name + " m=" + m);
Bundle bundle = intent.getExtras();
BroadcastReceiver注册类型
BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册。
1).静态注册:直接在AndroidManifest.xml文件中进行注册。规则如下:
&receiver android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" &
&/receiver&
其中,需要注意的属性android:exported& &&此broadcastReceiver能否接收其他App的发出的广播,这个属性默认值有点意思,其默认值是由receiver中有无intent-filter决定的,如果有intent-filter,默认值为true,否则为false。(同样的,activity/service中的此属性默认值一样遵循此规则)同时,需要注意的是,这个值的设定是以application或者application user id为界的,而非进程为界(一个应用中可能含有多个进程);android:name &&& 此broadcastReceiver类名;android:permission &&&如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接收;android:process &&&broadcastReceiver运行所处的进程。默认为app的进程。可以指定独立的进程(Android四大基本组件都可以通过此属性指定自己的独立进程)
常见的注册形式有:
&receiver android:name=".MyBroadcastReceiver" &
&intent-filter&
&action android:name="android.net.conn.CONNECTIVITY_CHANGE" /&
&/intent-filter&
&intent-filter&
&action android:name="android.intent.action.BOOT_COMPLETED" /&
&/intent-filter&
&/receiver&
其中,intent-filter由于指定此广播接收器将用于接收特定的广播类型。本示例中给出的是用于接收网络状态改变或开启启动时系统自身所发出的广播。当此App首次启动时,系统会自动实例化MyBroadcastReceiver,并注册到系统中。
之前常说:静态注册的广播接收器即使app已经退出,主要有相应的广播发出,依然可以接收到,但此种描述自Android 3.1开始有可能不再成立,具体分析详见本文后面部分。
2).动态注册:动态注册时,无须在AndroidManifest中注册&receiver/&组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver。registerReceiver的定义形式如下:
1 registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
2 registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)
典型的写法示例如下:
1 public class MainActivity extends Activity {
public static final String BROADCAST_ACTION = "com.example.corn";
private BroadcastReceiver mBroadcastR
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BROADCAST_ACTION);
registerReceiver(mBroadcastReceiver, intentFilter);
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mBroadcastReceiver);
注:Android中所有与观察者模式有关的设计中,一旦涉及到register,必定在相应的时机需要unregister。因此,上例在onDestroy()回到中需要unregisterReceiver(mBroadcastReceiver)。
当此Activity实例化时,会动态将MyBroadcastReceiver注册到系统中。当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。
3.广播发送及广播类型
经常说&发送广播&和&接收&,表面上看广播作为Android广播机制中的实体,实际上这一实体本身是并不是以所谓的&广播&对象存在的,而是以&意图&(Intent)去表示。定义广播的定义过程,实际就是相应广播&意图&的定义过程,然后通过广播发送者将此&意图&发送出去。被相应的BroadcastReceiver接收后将会回调onReceive()函数。
下段代码片段显示的是一个普通广播的定义过程,并发送出去。其中setAction(..)对应于BroadcastReceiver中的intentFilter中的action。
1 Intent intent = new Intent();
2 intent.setAction(BROADCAST_ACTION);
3 intent.putExtra("name", "qqyumidi");
4 sendBroadcast(intent);
根据广播的发送方式,可以将其分为以下几种类型:1.Normal Broadcast:普通广播
2.System Broadcast: 系统广播
3.Ordered broadcast:有序广播
4.Sticky Broadcast:粘性广播(在 android 5.0/api 21中deprecated,不再推荐使用,相应的还有粘性有序广播,同样已经deprecated)
5.Local Broadcast:App应用内广播
下面分别总结下各种类型的发送方式及其特点。
1).Normal Broadcast:普通广播
此处将普通广播界定为:开发者自己定义的intent,以context.sendBroadcast_"AsUser"(intent, ...)形式。具体可以使用的方法有:sendBroadcast(intent)/sendBroadcast(intent, receiverPermission)/sendBroadcastAsUser(intent, userHandler)/sendBroadcastAsUser(intent, userHandler,receiverPermission)。普通广播会被注册了的相应的感兴趣(intent-filter匹配)接收,且顺序是无序的。如果发送广播时有相应的权限要求,BroadCastReceiver如果想要接收此广播,也需要有相应的权限。
2).System Broadcast: 系统广播
Android系统中内置了多个系统广播,只要涉及到手机的基本操作,基本上都会发出相应的系统广播。如:开启启动,网络状态改变,拍照,屏幕关闭与开启,点亮不足等等。每个系统广播都具有特定的intent-filter,其中主要包括具体的action,系统广播发出后,将被相应的BroadcastReceiver接收。系统广播在系统内部当特定事件发生时,有系统自动发出。
3)Ordered broadcast:有序广播
有序广播的有序广播中的&有序&是针对广播接收者而言的,指的是发送出去的广播被BroadcastReceiver按照先后循序接收。有序广播的定义过程与普通广播无异,只是其的主要发送方式变为:sendOrderedBroadcast(intent, receiverPermission, ...)。
对于有序广播,其主要特点总结如下:
1&多个具当前已经注册且有效的BroadcastReceiver接收有序广播时,是按照先后顺序接收的,先后顺序判定标准遵循为:将当前系统中所有有效的动态注册和静态注册的BroadcastReceiver按照priority属性值从大到小排序,对于具有相同的priority的动态广播和静态广播,动态广播会排在前面。
2&先接收的BroadcastReceiver可以对此有序广播进行截断,使后面的BroadcastReceiver不再接收到此广播,也可以对广播进行修改,使后面的BroadcastReceiver接收到广播后解析得到错误的参数值。当然,一般情况下,不建议对有序广播进行此类操作,尤其是针对系统中的有序广播。
4)Sticky Broadcast:粘性广播(在 android 5.0/api 21中deprecated,不再推荐使用,相应的还有粘性有序广播,同样已经deprecated)。
既然已经deprecated,此处不再多做总结。
5)Local Broadcast:App应用内广播(此处的App应用以App应用进程为界)
由前文阐述可知,Android中的广播可以跨进程甚至跨App直接通信,且注册是exported对于有intent-filter的情况下默认值是true,由此将可能出现安全隐患如下:
1.其他App可能会针对性的发出与当前App intent-filter相匹配的广播,由此导致当前App不断接收到广播并处理;
2.其他App可以注册与当前App一致的intent-filter用于接收广播,获取广播具体信息。
无论哪种情形,这些安全隐患都确实是存在的。由此,最常见的增加安全性的方案是:
1.对于同一App内部发送和接收广播,将exported属性人为设置成false,使得非本App内部发出的此广播不被接收;
2.在广播发送和接收时,都增加上相应的permission,用于权限验证;
3.发送广播时,指定特定广播接收器所在的包名,具体是通过intent.setPackage(packageName)指定在,这样此广播将只会发送到此包中的App内与之相匹配的有效广播接收器中。
App应用内广播可以理解成一种局部广播的形式,广播的发送者和接收者都同属于一个App。实际的业务需求中,App应用内广播确实可能需要用到。同时,之所以使用应用内广播时,而不是使用全局广播的形式,更多的考虑到的是Android广播机制中的安全性问题。
相比于全局广播,App应用内广播优势体现在:
1.安全性更高;
2.更加高效。
为此,Android v4兼容包中给出了封装好的LocalBroadcastManager类,用于统一处理App应用内的广播问题,使用方式上与通常的全局广播几乎相同,只是注册/取消注册广播接收器和发送广播时将主调context变成了LocalBroadcastManager的单一实例。
代码片段如下:
1 //registerReceiver(mBroadcastReceiver, intentFilter);
2 //注册应用内广播接收器
3 localBroadcastManager = LocalBroadcastManager.getInstance(this);
4 localBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);
6 //unregisterReceiver(mBroadcastReceiver);
7 //取消注册应用内广播接收器
8 localBroadcastManager.unregisterReceiver(mBroadcastReceiver);
10 Intent intent = new Intent();
11 intent.setAction(BROADCAST_ACTION);
12 intent.putExtra("name", "qqyumidi");
13 //sendBroadcast(intent);
14 //发送应用内广播
15 localBroadcastManager.sendBroadcast(intent);
4.不同注册方式的广播接收器回调onReceive(context, intent)中的context具体类型
1).对于静态注册的ContextReceiver,回调onReceive(context, intent)中的context具体指的是ReceiverRestrictedContext;
2).对于全局广播的动态注册的ContextReceiver,回调onReceive(context, intent)中的context具体指的是Activity Context;
3).对于通过LocalBroadcastManager动态注册的ContextReceiver,回调onReceive(context, intent)中的context具体指的是Application Context。
注:对于LocalBroadcastManager方式发送的应用内广播,只能通过LocalBroadcastManager动态注册的ContextReceiver才有可能接收到(静态注册或其他方式动态注册的ContextReceiver是接收不到的)。
5.不同Android API版本中广播机制相关API重要变迁
1).Android5.0/API level 21开始粘滞广播和有序粘滞广播过期,以后不再建议使用;
2).&静态注册的广播接收器即使app已经退出,主要有相应的广播发出,依然可以接收到,但此种描述自Android 3.1开始有可能不再成立&
Android 3.1开始系统在Intent与广播相关的flag增加了参数,分别是FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES。
FLAG_INCLUDE_STOPPED_PACKAGES:包含已经停止的包(停止:即包所在的进程已经退出)
FLAG_EXCLUDE_STOPPED_PACKAGES:不包含已经停止的包
主要原因如下:
自Android3.1开始,系统本身则增加了对所有app当前是否处于运行状态的跟踪。在发送广播时,不管是什么广播类型,系统默认直接增加了值为FLAG_EXCLUDE_STOPPED_PACKAGES的flag,导致即使是静态注册的广播接收器,对于其所在进程已经退出的app,同样无法接收到广播。
详情参加Android官方文档:http://developer.android.com/about/versions/android-3.1.html#launchcontrols
由此,对于系统广播,由于是系统内部直接发出,无法更改此intent flag值,因此,3.1开始对于静态注册的接收系统广播的BroadcastReceiver,如果App进程已经退出,将不能接收到广播。
但是对于自定义的广播,可以通过复写此flag为FLAG_INCLUDE_STOPPED_PACKAGES,使得静态注册的BroadcastReceiver,即使所在App进程已经退出,也能能接收到广播,并会启动应用进程,但此时的BroadcastReceiver是重新新建的。
1 Intent intent = new Intent();
2 intent.setAction(BROADCAST_ACTION);
3 intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
4 intent.putExtra("name", "qqyumidi");
5 sendBroadcast(intent);
注1:对于动态注册类型的BroadcastReceiver,由于此注册和取消注册实在其他组件(如Activity)中进行,因此,不受此改变影响。
注2:在3.1以前,相信不少app可能通过静态注册方式监听各种系统广播,以此进行一些业务上的处理(如即时app已经退出,仍然能接收到,可以启动service等..),3.1后,静态注册接受广播方式的改变,将直接导致此类方案不再可行。于是,通过将Service与App本身设置成不同的进程已经成为实现此类需求的可行替代方案。
阅读(...) 评论()大神note3好用吗?大神note3参数详细介绍
互联网 & 发布时间: 15:50:07 & 作者:佚名 &
大神Note3作为首款千元指纹手机,在发布前就引发不少用户关注。日发布之后更是成为热门机型之一。那么大神note3好用吗?下面小编为大家介绍大神note3参数,一起来看看吧
  作为目前全球首款不足千元的指纹手机,大神Note3的出现给当前很多国内用户们带来了希望,那时大神手机借势宣布&无指纹,不完美,完美在7月&。在该机发布之后,很多对这款手机感兴趣的用户们很想知道大神Note3好用吗,为了能让大家对该机有更深的了解,下面本文就来为大家介绍下大神Note3的详细参数。
  想要知道大神Note3好用吗,我们最主要就是来了解下它的参数。
大神&Note3(全网通)
主屏分辨率
屏幕像素密度
双卡,全网通
联发科&MT6753
处理器位数
64位(双)
可拆卸式电池
摄像头类型
双摄像头(前后)
后置摄像头
1300万像素
前置摄像头
感应器类型
重力感应器,光线传感器,距离传感器,陀螺仪,指南针,指纹识别2.0+
  整体配置上,大神note3机身正面是一块5.5英寸720P显示屏,机身内部搭载一颗64位联发科MT6753八核处理器,配备了2GB运行内存与16GB机身存储,并运行COOLUI 6.0操作界面。拍照方面则采用后置1300万像素镜头+前置镜头为500万像素的组合,电池容量为3000毫安时。在初步了解大神note3之后,我们不妨来体验一下具有特色的指纹识别功能。
  至于大神Note3好用吗,我们不能这么快下定论,毕竟还没有正式首发。不过大神Note3是一款定位低端的千元机,光从指纹来看就足以让大家信服了。
大家感兴趣的内容
12345678910
最近更新的内容查看: 1321|回复: 5
帖子精华0昵称杭威宇家居专营店分享阅读权限20听众数收听数注册时间最后登录
专员, 积分 41, 距离下一级还需 9 积分
当前用户组为 专员当前积分为 41, 升到下一级还需要 9 点。
该用户从未签到店铺杭威宇家居专营店威望0
京东手机端详情页 店铺分类获取打不开?我是从手机端复制的链接,但是打不开?不知道是哪里出了问题?
还是手机端详情页&&“店铺分类“”链接 不显示????大神们知道吗????
&table width=&0& cellspacing=&0& cellpadding=&0& border=&0&&
& & &tbody&
& && &&&&tr class=&firstRow&&
& && && && &&td&
& && && && && & &a href=&https://shop.m.jd.com/search?shopId=546954&shopCategoryId=4688985&active=4688985& target=&_blank&&&img src=&//img10.360buyimg.com/imgzone/jfs/t7/41e6e84a/58bd20dfN18252ec9.jpg&/&&/a&
& && && && &&/td&
以下是我获取的方式:(手机端店铺分类)
13:42 上传
京东手机端分类关联
13:42 上传
京东手机端分类关联
13:42 上传
京东手机端分类关联
帖子精华0昵称杭威宇家居专营店分享阅读权限20听众数收听数注册时间最后登录
专员, 积分 41, 距离下一级还需 9 积分
当前用户组为 专员当前积分为 41, 升到下一级还需要 9 点。
该用户从未签到店铺杭威宇家居专营店威望0
我是想在详情页做个店铺分类的关联,但是 链接不显示???求大神指导!!!
帖子精华5昵称论坛管理员分享阅读权限200听众数收听数注册时间最后登录
当前用户组为 论坛官方管理员当前积分为 , 该用户为特殊用户。
TA的每日心情怒 17:05签到天数: 111 天[LV.6]常住居民II店铺卖家论坛威望637
大宽88 发表于
我是想在详情页做个店铺分类的关联,但是 链接不显示???求大神指导!!!
打开手机端装修页后,拉到最下方,没有编辑选项么?
帖子精华0昵称杭威宇家居专营店分享阅读权限20听众数收听数注册时间最后登录
专员, 积分 41, 距离下一级还需 9 积分
当前用户组为 专员当前积分为 41, 升到下一级还需要 9 点。
该用户从未签到店铺杭威宇家居专营店威望0
本帖最后由 大宽88 于
14:54 编辑
admin 发表于
打开手机端装修页后,拉到最下方,没有编辑选项么?
有编辑选项,但是没有获取链接的地址~~
14:53 上传
我是做的手机端“详情页“” 版式关联&&店铺分类, 不是首页的哦~&&
帖子精华2昵称威嘉科技分享阅读权限120听众数收听数注册时间最后登录
副总裁, 积分 3162, 距离下一级还需 638 积分
当前用户组为 副总裁当前积分为 3162, 升到下一级还需要 638 点。
TA的每日心情无聊 17:47签到天数: 16 天[LV.4]偶尔看看III店铺威嘉信息科技有限公司威望9
大宽88 发表于
有编辑选项,但是没有获取链接的地址~~
进入到手机端店铺首页(可以通过用手机分享链接给自己的qq,然后在电脑端打开链接;或者登陆m.jd.com搜索自己的店铺名称进入到手机端首页),页面底部热门单击下,然后弹出对应的分类,在对应点击下,复制地址栏的分类链接即可。
帖子精华0昵称爱邦仕官方旗舰店分享阅读权限25听众数收听数注册时间最后登录
高级专员, 积分 67, 距离下一级还需 13 积分
当前用户组为 高级专员当前积分为 67, 升到下一级还需要 13 点。
TA的每日心情开心 22:23签到天数: 1 天[LV.1]初来乍到店铺爱邦仕官方旗舰店威望0
大宽88 发表于
有编辑选项,但是没有获取链接的地址~~
这个都设置了,但是打开手机端&&下面的店铺分类都不显示···我看人家都可以显示的
附带常见问题解决方案!产品经理如何进行竞品分析? - 知乎显示全部<strong class="NumberBoard-itemValue" title="1被浏览<strong class="NumberBoard-itemValue" title="5,425分享邀请回答3.5K186 条评论分享收藏感谢收起2.7K111 条评论分享收藏感谢收起淘宝的分类链接如何获取,不是分类图片链接,是点击分类后出现的宝贝总的一个链接_百度知道
淘宝的分类链接如何获取,不是分类图片链接,是点击分类后出现的宝贝总的一个链接
淘宝店铺分类页的手机端链接如何获取,是点击分类后出现的宝贝总的一个链接比如一个首饰店,宝贝分类,1.项链 2.耳环 3.戒指。我想发给买家戒指这个分类的手机地址。手机地址,不是PC地址。
我有更好的答案
我也在找办法,网上查的回答都很傻逼,不懂我们的意思,装修店铺有分类小模块,是想找到链接,添加进去,这样点击分类图片或者模块就可以一步查找到分类;我感觉这个你可以进入你的主店铺,找到左侧分类的列表(前提你都分类好,这个很简单就不说了)。点击其中一个分类,然后复制当前的网址,你试试这样可不可以,我也是菜鸟,就想到这个办法!
采纳率:100%
要获取分类链接,首要条件是要将店铺里的宝贝分类:1.进入卖家进入--宝贝分类管理2.分类有添加手工分类和添加自动分类,可根据宝贝的特点添加,完成后保存更改3.完成分类后,进入卖家中心,选择“查看淘宝店铺”4.这时页面会跳到店铺首页,找到左侧的宝贝分类,找到并点击要获取链接的分类;5.进入后全选地址栏的链接复制就可以了.提示:新建的宝贝分类显示可能会有延迟,一般保存后30分左右可正常。
在店铺快速装修菜单下面就有
快速装修菜单下面?能麻烦截个图,上长图片吗?我没找到呢
有一个手机端转换的网址,可以吧PC端的网址转换成移动端的地址!
这个我也研究了很久,下边那位朋友意思理解对了,但是他的方法我试过不行。找了好久,后边才发现其实特别简单,就是在输链接的那个框里,注意看有一个眼睛的图标,眼睛后边有个链接的图标(像颗曲别针),直接点那个图标,进去就是一个链接小工具,可以选宝贝链接、宝贝分类、优惠券、店铺故事承接页、自定义页面链接等等,直接选就好啦,(我自己也百度上查淘宝相关的资料,所以在这里分享给大家)
4条折叠回答
为您推荐:
其他类似问题
淘宝的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 哪位大神有最新网站 的文章

 

随机推荐