精华内容
下载资源
问答
  • 手机Push方案之比较

    千次阅读 2010-07-13 16:33:00
    手机Push方案之比较

    关于Pushmail那些事儿

    handspring

    有什么推送方案?

    Pushmail的意义在于,客户端不再是定时或手动发起收取邮件的动作,而是通过服务器的新邮件通知来触发收取邮件这一行为。
    在我们常用的公司局域网或固网宽带上,这一创新的意义并不大,因为流量多数都是按月来收取,带宽也不是什么问题,但是相反在移动网络中,流量的资费以及带宽的限制,使得这一方式赢得了移动用户的欢心。
    Pushmail采用的通知协议主要有两种,一种是通过短信的形式来通知客户端收取邮件,RIM和一些Pushmail服务商采用这类方式;另一种是通过在在一个已有的TCP连接中发送通知数据包的方式来触发客户端收取邮件, Gmail和一部分Pushmail服务商采用这类方式, IMAP IDLE是这类方式中知名度和应用较为广泛的一个。

    IMAP IDLE 模式是 IMAP 协议的一项高级功能,在这种模式下,客户端登录连接服务器后并无主动查询新邮件的动作,而是停留在 IDLE(空闲) 状态,当服务器接收到新邮件后通知客户端,客户端再开始查询新邮件的动作,此动作完成后,客户端重新回到空闲状态。使用 IMAP IDLE 模式的好处是,服务器收到新邮件时客户端马上就会收到通知。这种推送方式需要长期在线连接。

    而不支持 IMAP IDLE 的客户端或者服务器,检查新邮件是靠客户端手动刷新或者定期查询(比如每5分钟),这种方式查询新邮件会有时间延迟,如果新邮件没有赶上上次查询,必须等到客户端下次查询时才能收到通知。

    使用 IMAP IDLE 功能需要第三方软件的支持,因为服务器在客户端没有登录的情况下不知道如何把邮件推送到你的手机,而且服务器只会通知客户端有新邮件,而下载新邮件的工作还需要客户端完成的,并且这个过程中客端必须一直保持与服务器的连接才能收到通知进而完成下载邮件 的工作,所以,这也正是为何很多人说IMAP IDLE是伪Push的原因。

    IMAP有什么缺点?

    IMAP IDLE诞生已久,对于手机来说,这是不需要运营商或第三方介入最佳的移动邮件解决方案之一。但是IMAP IDLE主要有3个缺点:
    1. 效率不高,IDLE只是起到通知的作用,具体的邮件体收取动作仍然由手机发起完成。IMAP在邮件收取上没有一些Pushmail服务提供商的私有协议高效,主要表现在传输过程的数据包压缩率上。
    2. 在2G的网络中, 长时间保持在线会影响用户的通话以及短信收发,因此Pushmail服务提供商所提供的短信触发功能更加实用。
    3. IMAP IDLE会对邮件服务器造成巨大的压力。
    不过作为IMAP的一个变形协议,Push-IMAP较为有效的解决或缓解了上述几个问题,但应用于移动网络还需待以时日。

    RIM为何采用短信通知的方式?

    BES的方式是从2G网络延用下来的,但不论是短信触发还是用户长时间在线,用户体验上差别不大。只是使用短信触发成本较高,也只有BB这么高的月费才能负担得起。
    实际上你去看RIM的3G终端策略,他是所有的手机厂商里推出3G手机最晚的之一,大概就比iPhone 3G早一点。因为单纯使用邮件的话, BB终端对3G的需求没那么大。
    而IDLE是非运营商或第三方中转的最佳方案之一,Exchange搭建成本太高。
    短信触发一般都会需要通过运营商或第三方服务,这个在大规模运营的时候是一块不小的成本。
    考虑到3G下便宜的流量资费,在国外多数第三方Pushmail服务商都避免使用短信触发方式,来降低用户的使用成本和自身的运营成本。

    但RIM采用短信触发的方式是有历史渊源的,在RIM起家的北美市场, CDMA2000网络占据了将近50%的份额,在CDMA2000网络下。如果数据通信保持长连接,那么即便没有数据在传送,短信和电话也都是无法进入。这就注定了,长连接方式无法应用在CDMA网络。
    相反在GSM网络下,只有在手机的GPRS连接在传输数据时,才偶尔会有电话或短信进不来的现象,多数情况下如果网络侧侦测到有电话进来,会将数据连接占用的信道暂时挂起,分配给电话或短信。这也就是为什么我们会看到手机左上方的双向箭头有一个/的标记。

    关于Nokia的Pushmail支持

    1. 目前支持IMAP IDLE协议的手机很多,S60的自带邮件客户端基本上都支持,只是自带的邮件使用界面实在简陋到令人发指的地步。
    2. Nokia Messaging有点类似于BIS的解决方案,Nokia Messaging本身并非邮件服务器,也不支持POP3或IMAP IDLE协议,因此

    Nokia Messaging与其客户端程序之间所通讯的协议为Nokia自己研发,同时也支持短信触发,只是并未启用该功能,因此你可以发现Nokia Messaging在手机的客户端与手机自带的完全不同。

    补一张数据传输量的对比图,就可以看出相比于Nokia Messaging或BB, IMAP和POP3实际是属于效率比较低的邮件传递协议。

    Original是指原始数据的大小,然后测算通过不同的设备或协议来收取这些邮件所耗费的流量。Nokia Messaging所使用的协议解释见上。

    短信触发和长时间在线,哪个更优?

    对于短信触发或保持连线方式电力消耗的对比,曾经有人做过评估,结论如下:

    According to our past experience, because creating the PDP context is so power-hungry (about the same as establishing a call), a permanent TCP connection is more power-efficient for users who are getting about 15-20 emails per day.
    Ideally, when SMS push is available for a carrier, users who have statistically sent/received more than 20 emails daily should automatically be switched to TCP push and vice-versa。

    结论:
    在2G网络中,数据语音不可同时使用。
    采用短信触发有助于减轻网络的压力,电力消耗取决于邮件数量。
    长连接:电力消耗同样取决于邮件数量,日均20封以上比短信触发更优,但是实际上2G不支持数据和语音同时传输,手机功能变得不可靠。

    但是随着3G时代的来临,情况也发生了一些变化。3G下语音和数据有单独的信道,互不干扰,也就是说你在打电话的同时照样能够上网。
    短信触发方式,耗电量与2G下相同,邮件数据多仍然费电。
    采用长连接方式,由于语音和数据信道分离,虽然建立数据连接的过程依然是需要的, 只是不会相互干扰。 所以如果邮件较多,长连接会比短信触发更省电,因为省去了反复建立数据连接的初始过程。

    在3G日益盛行的今天,带宽不再是瓶颈,流量资费也日趋下降,因此多数用户选择BB不会仅仅因为它有良好的邮件体验(公司用户例外), BB的设计和易用性占了更大的比重。

    展开全文
  • (1)新建python文件,命令为pushso1.py (2)新建一个bat文件,命名为pushso1.bat (3)新建一个txt文件,命名为latest_so_file.txt...# 脚本功能:将编译完成的Android 手机 so 文件push手机, # 并具有记忆功能.

    (1)新建python文件,命令为pushso1.py

    (2)新建一个bat文件,命名为pushso1.bat

    (3)新建一个txt文件,命名为latest_so_file.txt,为空即可

     

    pushso1.py:

    #################################################################################
    #
    # 脚本功能:将编译完成的Android 手机 so 文件push进手机,
    #          并具有记忆功能,使用时会提示是否需要push上一次的so文件
    #          push so完成后会自动杀进程
    #
    # 使用方法:
    #     1 电脑连接手机,使用如下两种方式运行脚本
    #     2 ubuntu电脑:命令行:python pushso1.py
    #     3 windows电脑:除上述方法外,还可以双击运行配套的pushso1.bat脚本文件
    # 备注:使用此脚本需要创建一个latest_so_file.txt文件,此文件会保存上一次push进手机的so文件路径
    #
    #################################################################################
    
    import os
    import sys
    lst=[] #保存即将push的so文件及路径
    
    #################################################################################
    #
    # 功能:若用户需要输入上次的so文件,会先读取latest_so_file.txt文件,并将so文件存放在lst中
    #
    # 实现:
    #     1 用户第一次pushso只能用新输入,不能选择此项(除非第一此手动将so文件先存放在该txt文件中)
    #
    #################################################################################
    def input_latest_so():
        current_file_path = os.path.abspath(__name__)
        upfilePath = os.path.dirname(current_file_path)
        with open("latest_so_file.txt", "r") as f:
            for line in f.readlines():
                line = line.strip('\n')  #去掉列表中每一个元素的换行符
                lst.append(line)
                print(line)
    
    
    #################################################################################
    #
    # 功能:读取用户输入的多个so文件,并存放在lst文件中,并将这些so文件中
    #
    # 实现:
    #     1 用户可以将so文件直接拖入命令行,每次输入以enter间隔,两次enter键结束输入(一次以为还需要输入,另一次结束输入)
    #
    #################################################################################
    def input_new_so():
        print('input so file, press Enter to continue:')
        while True:
            temp = input()
            if temp == '':
                break
            lst.append(temp)
        current_file_path = os.path.abspath(__name__)
        upfilePath = os.path.dirname(current_file_path)
        with open("latest_so_file.txt","w") as f:
            for i in lst:
                f.write(i)  # 自带文件关闭功能,不需要再写f.close()
                f.write('\n')
    
    
    #################################################################################
    #
    # 功能:读取lst文件中包含的so文件,并push进手机
    #
    # 实现:
    #     1 读取每行的输入,找到so文件的父级目录,判断是需要push进手机的哪个目录
    #
    #################################################################################
    def push_so(lst):
        print('\npush so start!')
        for i in lst:
            print(i)
            file = i #获取文件路径,eg: D:\\r_trunk\\vendor\\lib\\hw\\libcamoem.so
            filePath = os.path.dirname(file) #获取文件的父级目录,eg: D:\\r_trunk\\vendor\\lib\\hw
            upfilePath = os.path.dirname(filePath) #获取文件的父级的父级目录,eg: D:\\r_trunk\\vendor\\lib
            upfileName = file[len(upfilePath)+1:len(filePath)] #获取文件的父级的父级目录名称,eg: hw
            if upfileName == 'hw':
                cmd = "adb push " +file+ " /vendor/lib/hw/"
            else:
                cmd = "adb push " +file+ " /vendor/lib/"
            
            os.system(cmd)
    
    
    #################################################################################
    #
    # 功能:读取一个字符,判断是不是数字
    #
    # 实现:
    #     1 
    #
    #################################################################################
    def is_number(s):
        try:
            float(s)
            return True
        except ValueError:
            pass
        try:
            import unicodedata
            unicodedata.numeric(s)
            return True
        except (TypeError, ValueError):
            pass
        return False
    
    
    #################################################################################
    #
    # 功能:杀手机进程
    #
    # 实现:
    #     1 找到正在运行的camera server 的进程线程,进而找到该进程,然后杀掉
    #
    #################################################################################
    def kill_server():
        print("\nkill camera server start!")
        cmd = "adb shell ps -A | find \"android.hardware.camera.provider@2.4-service\""
        lala = os.popen(cmd).readlines()
    
        length = len(lala)
        if 0 == length:
            print("android.hardware.camera.provider@2.4-service not exist, kill failed!")
        else:
            print("中间过程: "+lala[0])
            pid = 0
            for i in lala[0].split(" "):
                if is_number(i):
                    pid = int(i)
                    break
    
            if pid == 0:
                print("no pid")
                return
    
            cmd = "adb root"
            os.system(cmd)
    
            cmd = "adb remount"
            os.system(cmd)
    
            cmd = "adb shell kill -9 "+str(pid)
            os.system(cmd)
    
            print("kill android.hardware.camera.provider@2.4-service done!")
            
    
    #################################################################################
    #
    # 功能:获取手机权限,询问是push上一次的so还是新的so文件
    #
    # 实现:
    #     1 adb root & adb remount后,根据条件判断选择调用哪个函数,最后push 所需的so
    #
    #################################################################################
    def start():
        cmd = "adb root"
        os.system(cmd)
    
        cmd = "adb remount"
        os.system(cmd)
    
        print('push latest so file ?')
        print('-press Enter to continue')
        print('-press any other key to push new so')
        temp = input()
        if temp == '':
            input_latest_so()
        else:
            input_new_so()  
    
        push_so(lst)
    
        print("push so done!")
    
        kill_server()
        
    
    
    if __name__ == "__main__":
        start()
    

     

    pushso1.bat

    @echo off
    
    python D:\\py\\pushso1.py
    
    ping -n 3 127.0.0.1>nul
    rem pause

     

    展开全文
  • 集成华为手机Push SDK的小结

    千次阅读 2017-04-13 15:57:51
    华为Push消息分为:通知栏消息和透传消息。

    华为Push消息分为:通知栏消息和透传消息。透传消息,到达后,用户需要自己解析和展示,虽然灵活,但不能保证一定能收到,特别是应用退出后。因此选择了通知栏消息,点击通知栏消息的后续行为,可以有如下几类选择:

    1. 直接打开应用
    2. 通过自定义动作打开应用
    3. 打开URL
    4. 富文本消息
    5. 短信收件箱广告
    6. 彩信收件箱广告
    本文主要涉及1和2类,如下为服务器端推送消息的结构体:

        private String notification_title; //M Notification bar上显示的标题
        private String notification_content; //M Notification bar上显示的内容
        private String notification_status_icon; //O 系统小图标名称,该图标预置在客户端,在通知栏顶部展示
        private String content_file_url ; // O 仅富媒体消息需要填写该字段
    
        /**
         * M 1:直接打开应用
         * 2:通过自定义动作打开应用
         * 3:打开URL
         * 4:富媒体消息
         * 5:短信收件箱广告
         * 6:彩信收件箱广告
         * 注意:当手机收到短信、彩信收件箱广告后,在收件人一栏显示的是应用在联盟上注册的名字
         */
    
        private Integer doings;
        private String smsContent; //O 短信收件箱广告内容; 当doings的取值为5时,该字段必须填写
        private String mmsUrl; // O 彩信收件箱广告附件链接
        private String url; //O 链接; 当doings的取值为3时,必须携带该字段
    
        private String intent; //O 自定义打开应用动作; 当doings的取值为2时,必须携带该字段
        private JSONArray extras; // JSON array O 用户自定义键值对; "extras":[{"season":"Spring"},{"weather":"raining"}]

    一、直接打开应用

    直接走启动应用的流程,当加入key-value的extras参数后,点击通知栏消息时,会触发PushReceiver的onEvent函数(当extras为空时,不会触发),获取key-value,但因为和启动流程并行,不太好做特殊处理。采用此方式关键参数的传递:

    doings:1


    二、自定义动作

    采用传递需要打开Activity的intentUri值,从而打开指定的页面。采用如下方式生成对应的字符串:

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("customscheme://com.mobile.mail189.activity/notify_detail"));
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("name", "zhangsan");
    String intentUri = intent.toUri(Intent.URI_INTENT_SCHEME);
    如上是隐式的方式,当然也能采用显示的指定具体的Activity。因为采用隐式,需要设置对应的intent-filter:

    <activity
            android:name=".PushDetailActivity"
            android:configChanges="keyboardHidden|orientation"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
    
            <intent-filter>
                   <action android:name="android.intent.action.VIEW"/>
                   <category android:name="android.intent.category.DEFAULT"/>
                   <data android:scheme="customscheme"
                       android:host="com.mobile.mail189.activity"
                       android:path="/notify_detail"/>
    
            </intent-filter>
    </activity>
    如果是采用如上的设置,服务器需要Push的参数为:

    doings:2
    inttent:intent://com.mobile.mail189.activity/notify_detail#Intent;scheme=customscheme;action=android.intent.action.VIEW;launchFlags=0x10000000;S.to=zhangsan;end



    PS:项目中是需要一个新邮件到达的提醒,但当APP完全退出时,根本不在已登录状态,就不能获取到相关数据;因此点击通知栏消息时,没有任何反应。后来我只好跳转到了一个不需要登录的一个页面。


    参考文档:

    1、http://developer.huawei.com/consumer/cn/wiki/index.php?title=HMS%E5%BC%80%E5%8F%91%E6%8C%87%E5%AF%BC%E4%B9%A6-PUSH%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%8F%A3

    2、http://club.huawei.com/thread-10204980-1-1-2851.html

    3、http://developer.huawei.com/consumer/cn/wiki/index.php?title=%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3








    展开全文
  • iphone手机push小应用

    2012-07-16 15:15:24
    blic class ApplePushInfo { private Log logger = LogFactory.getLog(this.getClass()); private PushDao pushDao; //证书 private String keystore = ...push.iphone.keystore", "d:/apns.p12&qu

    需求秒数:做一个给安装公司客户端的iphone用户推送广告的功能。

    直接上代码。

    使用jar包:JavaPNS_2.2.jar

     

     

    /**
     *  push 
     * @author penghui.li
     * 
     */
    public class ApplePushInfo {
    	private Log logger = LogFactory.getLog(this.getClass());
    	private PushDao pushDao;
    	//证书
    	private String keystore = ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.keystore", "d:/apns.p12");
    	//证书密码
    	private String password = ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.password", "123456");
    		
    	private boolean production = ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.production", "0").equals("0") ? true : false;
    	//线程数
    	private int threads = Integer.parseInt(ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.threads.count", "30"));
    	
    	public ApplePushInfo() {
    		ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
    		pushDao = (PushDao) ctx.getBean("pushDao");
    	}
    	
    	
    	//程序入口
    
    	public static void main(String[] args) {
    		try {
    			new ApplePushInfo().push();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	@SuppressWarnings({ "rawtypes", "unused", "unchecked" })
    	public void push() {
    		long startTm = System.currentTimeMillis();
    		try {
    			//对apple反馈的数据进行处理
    			handleFeedback();
    			Map map = new HashMap();
    			//获得要发送的信息列表
    			List<PushInfoVo> list = pushDao.queryPushInfoList(map);
    			List<PushDeviceVo> ulist = new ArrayList<PushDeviceVo>();
    			for (PushInfoVo vo : list) {
    				map.put("type", vo.getType());
    				//获得要发送该信息的设备列表(即iphone的udid)
    				ulist = pushDao.queryPushUdidList(map);
    				List<Device> li = new ArrayList<Device>();
    				for (PushDeviceVo dVo : ulist) {
    					Device device = new BasicDevice();
    					device.setToken(dVo.getDeviceToken());
    //					device.setToken("e4becddba633695c9e911f2e8709ce53d3c7af557ace4efc9ae2675a00ae6ab7");
    					li.add(device);
    				}
    				startTm = System.currentTimeMillis();
    				if (li.size() > 0) {
    					send(li, vo.getInfo(), keystore, password, production);
    				}
    				logger.info("**********push:" + li.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]ms");
    			}
    			startTm = System.currentTimeMillis();
    			//发送成功后批量更新信息的状态
    			map.put("infoList", list);
    			if(list != null && list.size()>0){
    				pushDao.updatePushInfoStatus(list);
    			}else{
    				logger.info("*********infolist is null or this size is zero");
    			}
    			logger.info("**********update info:" + list.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]ms");
    		} catch (Exception ex) {
    			ex.printStackTrace();
    			logger.info(ex.toString());
    		}
    	}
    
    	/**
    	 * 对apple反馈的数据进行处理
    	 * @param devList
    	 */
    	@SuppressWarnings({ "rawtypes", "unchecked" })
    	public void handleFeedback() {
    		long startTm = System.currentTimeMillis();
    		List<Device> feedBacklist = new ArrayList<Device>();
    		try {
    			feedBacklist = Push.feedback(keystore, password, production);
    			logger.info("**********getFeedback:" + feedBacklist.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]ms");
    			Map map = new HashMap();
    			map.put("devList", feedBacklist);
    			
    //			/**********test start*************/
    //			Device device = new BasicDevice();
    //			device.setToken("test9fdb1188bdc27177065db15639af903d7f2b474041b02e4ddd303bcaca509");
    //			feedBacklist.add(device);
    //			/**********test end*************/
    			
    			startTm = System.currentTimeMillis();
    			if(feedBacklist != null && feedBacklist.size()>0){
    				pushDao.updateDeviceStatus(feedBacklist);
    			}else{
    					logger.info("*********feedBacklist is null or this size is zero");	
    			}
    			logger.info("**********update Device:" + feedBacklist.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]s");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			logger.info(e.toString());
    		} 
    		
    
    	}
    
    	/**
    	 * 发送
    	 * @param devices
    	 * @param message
    	 * @param keystore
    	 * @param password
    	 * @param production
    	 * @throws Exception
    	 */
    	@SuppressWarnings("unused")
    	public void send(List<Device> devices, String message, Object keystore,
    			String password, boolean production) throws Exception {
    		PushNotificationPayload payload = PushNotificationPayload.alert(message);
    		List<PushedNotification> notifications = Push.payload(payload,keystore, password, production, threads, devices);
    		int successNum = 0;
    		int failedNum = 0;
            for (PushedNotification notification : notifications) {
                    if (notification.isSuccessful()) {
    //                        System.out.println("Push notification sent successfully to: " +
    //                                                        notification.getDevice().getToken());
                            
                            successNum++;
                    } else {
                    		failedNum++;
                            String invalidToken = notification.getDevice().getToken();
                            logger.info("**********Push notification sent failed to:token->[" + invalidToken+"]");
                            Exception theProblem = notification.getException();
    //                        theProblem.printStackTrace();  
                            ResponsePacket theErrorResponse = notification.getResponse();
                            if (theErrorResponse != null) {
    //                                System.out.println(theErrorResponse.getMessage());
    //                                logger.info("theErrorResponse.getMessage()");
                            }
                    }
            }
            logger.info("**********Push message:"+message+"**** total->["+devices.size()+"]***success->["+successNum+"]***failed["+failedNum+"]");
    	}
    
    	public PushDao getPushDao() {
    		return pushDao;
    	}
    
    	public void setPushDao(PushDao pushDao) {
    		this.pushDao = pushDao;
    	}
    }

     

    展开全文
  • adb push 文件到手机

    2020-05-19 18:52:28
    adb push D:\aa.apk /sdcard
  • 电脑导出文件到手机 adb push

    千次阅读 2018-11-06 20:51:38
    用ADB push 命令将文件保存到手机 1、查看连接设备 用adb devices命令查看已连接设备 可以看到这样的命令,表示已连接一台名为CLB7N1850302137的android设备: List of devices attached CLB7N18503021377 device ...
  • PUSH

    2020-11-09 11:18:48
    对于只读的文件系统,采用这个方法,去掉只读限制,在将编好的模块push手机
  • 任务需求:往android手机push多张照片功能: 1、push照片 2、重启手机 3、删除push照片**使用语言:**pythonimport os# 1.push photos for i in range(1, 1001): cmd1 = "adb push D:\\test\\1.jpg /sdcard/...
  • 使用adb push传输文件夹到手机

    万次阅读 2019-08-24 17:20:44
    命令 adb push dirName\ phonePath 示例 将当前目录中的ad文件夹包括其中的文件复制到sd卡下的1目录下 adb push ad\ /sdcard/1/ad/ 结果
  • push文件苹果手机修复

    2014-04-24 11:18:33
    推送 修复 修复苹果推送功能 facetime
  • OPPO手机ColorOS3.0 Push通知新特性

    千次阅读 2018-02-07 19:08:29
    OPPO R9采用了ColorOS3.0作为手机系统,为了给用户一个良好的体验,不让各种垃圾消息的推送影响视觉,在ColorOS3.0上默认都屏蔽了第三方应用的通知栏权限,如果应用需要在通知栏展示Push通知的话还需要用户自己手动...
  • Android手机系统push mail配置使用详细说明 发布: 2010-5-18 15:01 | 作者: admin | 来源: 飞翼PushMail平台 下面介绍使用Android手机系统配置push mail的方式。 在使用配置push mail之前,您
  • push交互 时序图

    2013-11-06 17:55:09
    文档是描述手机push(长连接)与服务器交互的交互时序图。已运用到项目中
  • 本地移动应用程序始终支持推送通知 。 但是,直到Notifications API弹出之前,网络上都没有这些通知。 Notifications API 通过JavaScript... Push.js是一个免费的通知库 ,可使用几行JavaScript处理所有基本的推送...
  • WAP PUSH应用实例 ...WAPPUSH通知系统模型主要由数据库、WAP服务器(也是PI)、PPG和手机浏览器组成。数据库主要由地址信息表组成,WAP服务器以无线标记语言(WML)网页形式存储通知内容,同时WAP服务器还充当PI。PPG
  • adb root adb remount adb disable-verity adb reboot adb root adb remount adb push aaa.apk /system/priv-app/GreeYuloreFramework
  • PUSH可以将某一站点或某一业务的链接通过短信发送到支持WAP PUSH功能的手机上,这样用户只需要阅读这条短信,打开短信中的链接,就可以直接访问业务了。因此,WAP PUSH实现了短信和WAP业务的结合,节省了用户寻找...
  • adb push区分设备

    千次阅读 2015-05-08 14:08:52
    利用adb命令在电脑与手机之间发送东西还是很方便的,可...而不能成功,此时可以在adb -s 设备名字 来选定指定设备来push, 如从电脑到手机push资料 如下:adb -s BH905UBU09  push test.apk /sdcard/car  红色字体是
  • 最近应公司要求设计的push实现,欢迎大家拍砖 PUSH技术是一种基于客户服务器机制...2)、push服务器 ——> 手机终端 可通过各自系统自带的功能完成,如系统供应商无相关提供,需针对系统特点,开发响应协议的服务端
  • 主要介绍了Android 用adb pull或push 拷贝手机文件到到电脑上,拷贝手机数据库到电脑上,拷贝电脑数据库到手机上 的相关资料,需要的朋友可以参考下
  • mmm编译app并且push手机

    千次阅读 2016-11-06 19:16:23
    有时候,我们需要进行app的编译,然后push手机中。这时,mmm编译就可以极大的帮助我们完成这个操作。 我们在代码的主要路径下,mmm到我们需要编译的app的目录。简言之: mmm /system/app/OK.apk 编译结果如下: ...
  • 用 adb push 文件到手机 system 目录

    千次阅读 2015-12-20 22:49:38
    我们可以只把修改的文件 push手机上,就快多了。 但 system 下的文件是不能随便 push 的,通常都会提示没有权限,或其他原因失败,下面说说我的操作,给大家参考。 我的手机是联芯平台的,不同平台不一样,仅供...
  • Adb push 文件夹到手机目录上

    万次阅读 2016-07-05 10:11:29
    步一: 首先使用USB连接电脑与小机,然后安装adb相应的驱动; 步二: 打开cmd ...假如你要将Windows下D盘根目录下的liu文件夹拷贝到机器(手机或者平板)的media目录下;可以使用命令如下: adb
  • WAP PUSH技术简介 1 WAP PUSH的概念 所谓推(PUSH)技术是一种基于客户服务器机制、由服务器主动将信息发往客户端的技术,其传送的信息通常是用户事先预订的。 同传统的拉(PULL)技术相比,最主要的区别...
  • 从我们对公司的产品发送移动短信、移动push、移动彩信的测试情况来看,三星的手机不支持wap push形式发送的彩信。我们打三星的技术咨询电话,给出的答复是所有在大陆销售的三星手机都不支持wap push。我认为是三星...
  • 对于消息的提醒方式可以分为四种:固定窗口、弹出窗口、手机短信和Push信息。下面的针对于push信息的机制和技术实现向大家介绍一下。  首先,我们要知道什么是Push信息?  所谓信息推送,就是"web广播",是通过...
  • <p>adb push 导入手机文件带中文字符会损坏+文件名乱码! 有怎么办法可以导入带中文字符不损坏方法! 备注:重命名为字母在导入方法不在考虑中!!! 导入后的问题展示&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,677
精华内容 1,070
关键字:

手机push