August 29th, 2009梦想专线

很久没有想到过这个词了, 这两天在玩刚换的手机, 于是就把系统的各种功能啊都翻出来瞧瞧: 打开系统设置啊, 调调字体啊,改改个人信息啊什么的, 于是在一个偶然(当然马克思教育我们偶然中一定存在必然)中忽然就在系统的设置里发现了久违的这个词来:

友好名称: 梦想专线

这个词的第一次出现应该是在四年前刚来上海的时候, 那个时候用着老大送的手机, 在买了第一块手机卡后,  打开手机, 启动, 之后做的事情可以会和这会刚换了手机的我一样 — 翻开各种功能, 从每个系统的功能设置种都能找到新鲜的感觉.

嗯, 那时候也一样, 一定是在一个偶然的时候会发现有这么一个设置, 可以设置手机卡在屏幕上显示的名字. 那该叫什么好呢, 当时应该认真想了很久, 那就叫梦想专线吧, 它会见证着我实现我的梦想.

当时的我一定没有太多大想法 — 那时刚到公司实习, 看所有人都感觉异常高大, 连公司员工说话时带的口音都感觉非同一般, 看同事的每一个举手投足都有一种非常牛X的韵味. 我想那个时候我的想法一定也是这样, 或许会有当时自己看起来很大的想法吧.

在年轻的时候, 第到一个新的地方就会感觉那里的一切都散发着不一样的色彩 —- 空气的味道更加新鲜, 花草树木的颜色更新的明亮鲜艳, 再或者这里的阳光很明亮透彻, 总之新环境里的一切都充满了新鲜奇特的感觉, 于是那时的自己便用自己的眼睛努力地去理解去记忆这所有的新东西. 不知道你有没有这样的记忆/

嗯, 这里不是总结的时候, 我还没有实现梦想.

只是现在的自己为了安慰那没有实现梦想而异常挫败的心, 便会渐渐变的没有梦想了.

挫败 — 似乎这个词又有些熟悉的味道……

August 29th, 2009dream 3

最近的睡眠质量确实不怎么样, 总是会做些梦, 这不, 前两天半夜又从梦里醒来.

梦中的情形是这样的: 我走在回家的路上, 这条路从小走到大, 在家东边有条南北向的小路, 它通往去城里的公路. 而我就走在这条路上, 可是这个时候正在狂风暴雨啊, 雨下的很大, 被雨浇着, 风也很大, 逆风的我连走路都十分困难. 天也是黑的, 伸手不见五指, 我甚至都看不到路是什么样子的, 连家的方向也只能凭记忆摸索着往前走.

走啊走啊, 最后总算是排除千难到了家门口, 这个时候我突然想起我家大门口本来应该有个灯的, 可以在这么大雨天, 天这么黑, 为什么没打开呢? 嗯, 当时我想, 以后一定要打开, 这样就可以给那些在黑暗中找不到方向的人指明一条方向了, 于是我就把灯打开了.

嗯, 然后我就醒了…… 醒来之后忽然想起自己最后的那个亮灯为人指路的想法, 顿时为自己能在梦中有这么崇高的国际主义精神的想法感到自己高尚了起来……

遂再找到解梦, 当然一般如果有好与不好两种解释的话我都会优先选择好的解释相信:)

——

雨是障碍

下雨天一向被认为是留客天,因为大雨阻挡了人们的行程。

在梦中,雨就意味着障碍和阻隔。

周公解梦:梦见下大雨,

意味着事业会遇到障碍。

周公解梦:梦见狂风暴雨,

所从事的工作会有好收入。

周公解梦:梦见狂风暴雨将要到来,

则吉利之兆接二连三来临。

August 18th, 2009

昨天做了一个挺有意思的梦, 记下来, 故事是这样的:

有一个朋友怀孕了, 肚子挺的大大的, 有一天我们大家聚一起玩, 具体玩的什么没太有印象了, 结果是在玩的过程中她的羊水破了, 于是就要生产了, 在经过一番努力后孩子生下来了, 不过不是个活的…… 应该归结为流产…… 于是大家都很伤心呐,好好的一个生命就这么没了, 我也很伤心啊, 心里那个难受啊

这时老天貌似说了句话:”你们不用伤心了, 先送你们一个孩子给你们安慰一下吧……”于是俺们就得到了一个活泼可爱的宝宝, 于是一起抚养了很久, 小孩子也从刚生下来的一点点长了大了很多, 这个小娃是很可爱啊, 在梦里一定陪着我们渡过了快乐的一段时间. 在这期间那个朋友又怀孕了, 在经历了一年之后又到了分娩的时候, 嗯嗯, 这个时候我担任起了接生这项重大的任务, 在努力了又努力, 可是生个孩子很难啊, 她累的满头大汗, 在关键时刻我鼓励她讲:”再使点劲, 用力就下来了!!!”,  于是在用了几次力后终于把孩子给生下来了……

在我们大家都在高兴的庆祝孩子出世的时候, 似乎天外又响起了一个声音告诉我们原来的上天送给我们的那个孩子要离开我们了…… 我们大家都很震惊, 毕竟他都和我们生活了一年了, 感情好的很, 大家都把他当成自己的孩子, 咋一听说他要离开我们都很不理解, 于是大家都对那个孩子说能不能不要离开我们, 大家一起生活多好啊. 可是那个小娃娃似乎要哭了说:”我的任务已经完成了, 我也要走了, 我还要去投胎呢……”(到这里大家应该明白, 老天送给我们的孩子其实应该是上天派来的一个小鬼), 我们听了这个都大概明白了, 于是便依依不舍的和他说了再见, 然后就送他离开了, 小娃娃的谢幕也很有特点, 我们看着他的身体从大变成了一半的大小, 然后就再变小, 然后就消失了……

再然后, 大家过上了幸福快乐的生活……

 

附:

周公解梦:

男性梦见流产:
表明目前你的经济利益会有损失,有可能是金钱方面的,也有可能是感情方面的。

女性梦见流产:
是提醒你要把全部精力投入事业的同时,也要注意自己的健康。

梦见别人生小孩

释梦 代表了一种新的渴望,一种新生

周公解梦解析

1、梦见生小孩子,你会心想事成、有财运。

2、梦见生男孩,生活会幸福、恬适。

3、女人梦见自己将要生一个男孩,意味着会过上幸福舒畅的生活。

4、梦见一位很可爱、趣致的小女孩,你会收到年终的奖金、双薪

刚搞了个黑莓玩, 在写短信时发现缺少了一个在用wm时常用的功能: 往短信中插入联系人. 这个有啥用呢, 想一想当有朋友问题你要另外一个人的号码时, 你就会知道它的用处了, 简单的通过一个菜单就可以插入联系人的手机号, 邮箱…… 而在黑莓里是没有这个功能的, 只能先切换到桌面然后打开联系人界面然后再找到你要的联系人, 然后再把电话复制出来, 再然后就是切换到短信程序并粘贴电话号码, 这显然是一个比较烦琐的步骤. 再假如你想要同时插入邮件/手机号, 则还要来回复制两遍. 所以我们就会看到一些常用的扩展来辅助插入手机号. 于是闲来无事自己研究了一下具体实现 (已经看到了一些具体的实现, 只是好奇, 所以研究了一下)

让我们分析一下这个问题, 要实现这个功能, 应该可以把功能划分为以下三个步骤:

  1. 往编辑短信的菜单中添加一个菜单项
  2. 当用户点击这个菜单的时候显示一个选择联系人的界面
  3. 当用户选择联系人之后把联系人的电话插入到短信中去.

下面我们分别看这三个步骤的实现, 步骤一很简单, BB提供了相关的api, 在它的文档中就可以找到, 具体请看这里. 首先我们需要实现一个派生自MenuItem类,

class InsertContactMenuItem extends ApplicationMenuItem {
   InsertContactMenuItem() {
                     super(2000000);  // This sets the item just before the "Add To:" menuitem          }

   public String toString() {             return "Insert Contact";
   }

  public Object run(Object context) {              ....

  }

上面就是一个简单的程序菜单项, 它在初始化的时候通过调用父类的构造函数来调整它在菜单项中的顺序(这个没有试过, 具体不知道工作不工作…), toString方法返回的字符串决定了它显示在菜单中的文字, 至于run方法则会在点击菜单项时会调用到, 它接受一个context参数, 系统会传入一个上下文相关的对像.

有了Menu类之后就可以把它注册到短信编辑界面里去了:

   private static void registerMenuItem() {
        System.out.println("*** Registering Insert contact menuitem");
        InsertContactMenuItem menuItem = new InsertContactMenuItem();
        ApplicationMenuItemRepository amir = ApplicationMenuItemRepository.getInstance();
        amir.addMenuItem(ApplicationMenuItemRepository.MENUITEM_SMS_EDIT, menuItem);
        }

上面的逻辑很简单, 首先取得系统ApplicationMenuItemRepository的实例, 并向注册InsertContactMenuItem到SMS_EDIT中去, 好了, 到了这里, 第一步基本完成了. 完成这一步, 你就可以在模拟器里看到相应的菜单项了, 如下图:

menu

下面开始第二步, 这里需要在用户点击菜单之后弹出一个选择联系人的界面, 这个可以通过BlackBerryContactList.choose()方法实现:

  PIM pim = PIM.getInstance();
  BlackBerryContactList list = (BlackBerryContactList) pim.openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY);
  PIMItem pimItem = list.choose ();
  String phoneNum = pimItem.getString  (Contact.TEL, 0);

这里首取得系统PIM的实例, 然后联系人列表并调用它的choose ()方法, 运行的结果应该如下图所示, 出现一个选择联系人的窗口:

choosecontact 到了这里, 最后一步就是要把联系人信息插入到短信输入窗口里了, 在这里我走了一段弯路:

在前面提到在系统调用run (Object context)方法时会传入一个上下文相关的对象, 在看4.5.0os的文档里提到这里会传入一个TextMessage对象, 具体参见这里, 当时我是想尝试直接通过修改这个对象来往消息里插入文本, 不过可惜的是行不能: 因为在这里传入的TextMessage对象是只读的, 尝试调用它的set方法会引发一个异常. 而且在老版本的系统里根本就没有传入一个对象(8800 4.2.0模拟器里显示传入的对象为空). 所以在经历了若干次失败后只好转求它法.

在阅读相关的代码的时候, 终于发现了一个UiApplication类, 通过它可以得到当前在最前面的屏幕, 并且我们可以遍历这个屏幕上的所有元素, 貌似有点希望! 让我们尝试遍历一当前屏幕并打印出这些元素, 看看它们有些什么!

  Screen screen = UiApplication.getUiApplication().getActiveScreen();
  for (int i = 0; i < screen.getFieldCount(); i++)
   {
        Field field = screen.getField(i);
        printFields (field);
   }
      void printFields (Field field)
         {
             try
             {
                    System.out.println("*** Field class: " + field.getClass().getName());

                         if (field instanceof  TextField) {
                             TextField textField = (TextField) field;
                             System.out.println("*** Found a text field");
                             System.out.println("*** text field label: "
                                     + textField.getLabel());

                                 System.out.println("*** Found text field");
                                 System.out.println ("** value: " + textField.getText ());
                         }
                         else if (field instanceof  Manager)
                         {
                             Manager mgrField = ( Manager) field;
                               System.out.println ("** Subfields..");
                                for (int i = 0; i < mgrField.getFieldCount(); i++) {
                                        Field subFields = mgrField.getField(i);
                                        printFields (subFields);
                        }
                    }
                }
                catch (Exception e)
                {
                    System.out.println ("printFields excetion:" + e.getMessage ());
                }
        }

对于这段代码, 前几行是得到当前活动的屏幕,  然后调用函数printFields函数, 在这个函数里我们基本是把一个field相关信息打印了出来: 它的标签的文字, 它的文字. 由于在screen里可以嵌套包含一些屏幕元素的管理对象, 所以我们需要一个递归来打印. 下面是得到的结果, 请注意使用蓝颜色标记的文字,

BB 8800 4.2.1.74的Debug输出

JVM: bklt @8044: timer

JVM: bklt @8044: idle 0

JVM: bklt @8044: setTimer 22

*** Field class: net.rim.device.api.ui.container.VerticalFieldManager

** Subfields..

*** Field class: net.rim.device.apps.internal.phone.model.ReadOnlyPhoneNumberField

** Subfields..

*** Field class: net.rim.device.apps.internal.phone.model.SmartPhoneNumberLabelField

*** Field class: net.rim.device.api.ui.component.SeparatorField

*** Field class: net.rim.device.apps.internal.sms.ui.SMSEditField

*** Found a text field

*** text field label: null

*** Found Using field

** value: Afdsf

BB  9500 的Debug输出:

FRIDG: could not find background_popup__Landscape.png

*** Field class: net.rim.device.api.ui.container.VerticalFieldManager

** Subfields..

*** Field class: net.rim.device.apps.api.ui.LeftRightFieldManager

** Subfields..

*** Field class: net.rim.device.api.ui.container.HorizontalFieldManager

** Subfields..

*** Field class: net.rim.device.api.ui.component.LabelField

*** Field class: net.rim.device.apps.internal.sms.ui.MessageComposeComboField

** Subfields..

*** Field class: net.rim.device.apps.api.addressbook.AddressBookComboField$EmailComposeEditable

*** Found a text field

*** text field label: To:

*** Found text field

** value: 12313

*** Field class: net.rim.device.apps.api.ui.LeftRightFieldManager

** Subfields..

*** Field class: net.rim.device.api.ui.container.HorizontalFieldManager

** Subfields..

*** Field class: net.rim.device.api.ui.component.LabelField

*** Field class: net.rim.device.apps.internal.sms.ui.MessageComposeComboField

** Subfields..

*** Field class: net.rim.device.apps.api.addressbook.AddressBookComboField$EmailComposeEditable

*** Found a text field

*** text field label: To:

*** Found text field

** value:

*** Field class: net.rim.device.apps.internal.smscompose.message.SMSEditorScreen$BodyVerticalFieldManager

** Subfields..

*** Field class: net.rim.device.apps.internal.smscompose.ui.SMSEditField

*** Found a text field

*** text field label: null

*** Found text field

** value: Wet

我们可以看到实际在这两个系统里的短信编辑输入框实际都是一个net.rim.device.apps.internal.smscompose.ui.SMSEditField 类, 看上去似乎我们可以通过判断一个Field对象是不是一个此类的实例来找到短信的实际输入框了, 十分遗憾的是请注意前面的那一连串类名里的一个.internal.: 对不起, 这是一个内部类, 外界开发人员是不能使用这个类的.不过我们还是可以利用这一点的, 在这里直接判断它的类名里是不是包含SMSEditField就可以达到预定效果.

      Screen screen = UiApplication.getUiApplication().getActiveScreen();
                    for (int i = 0; i < screen.getFieldCount(); i++)
                    {
                        Field field = screen.getField(i);
                        printFields (field, phoneNum);
                    }

      void printFields (Field field, String str)
         {
             try
             {
                           System.out.println("*** Field class: "
                                 + field.getClass().getName());

                         if (field instanceof  TextField) {
                             TextField textField = (TextField) field;
                             System.out.println("*** Found a text field");
                             System.out.println("*** text field label: "
                                     + textField.getLabel());

                                 System.out.println("*** Found text field");
                                 System.out.println ("** value: " + textField.getText ());
                                 if (textField.getClass ().getName ().endsWith(".SMSEditField")
                                 {
                                     System.out.println ("insertting text to...");
                                    textField.insert (str);
                                }

                         }
                         else if (field instanceof  Manager)
                         {
                             Manager mgrField = ( Manager) field;
                               System.out.println ("** Subfields..");
                                for (int i = 0; i < mgrField.getFieldCount(); i++) {
                                        Field subFields = mgrField.getField(i);
                                        printFields (subFields, str);
                        }
                    }
                }
                catch (Exception e)
                {
                    System.out.println ("printFields excetion:" + e.getMessage ());
                }
        }
        }

修改完代码后, 编译, 运行, 启动程序, 然后打开短信输入窗口, 按照前面的步骤选择联系人, 确认! 电话被成功的插入到短信编辑窗口里了!:)

resultsms

很好, 这里我们基本大功告成了! 不过其实还有很事情要做: 怎么把程序弄成开机启动的, 然后应该在选择联系人之后我们应该弹出一个对话框让用户选择需要插入的项(移动电话, 家庭电话, email 等). 不过做为一个自己瞎折腾型的项目, 到这里咱们就告一段落了:)

最后再告诉你一个不幸的消息, 即便你有了这个程序你也不能把它安装到你的手机里的, 这是因为黑莓开发的api中有一些是需要官方的验证的, 而这个验证在当前是需要钱滴(20刀). 不过即使没有申请官方的验证也是可以在模拟器里支持你的程序的, 这就是我写这篇文章的环境:)

具体的代码在这里:InsertContact.java

August 2nd, 2009莫名其妙地

记忆变的很差, 想不起一些最近发生过的事, 想不起最近见过的一些人, 甚至连刚刚查的行程安排, 转眼就连时间忘的一干二净. 幸好还记得刚才写完第一句话时似乎发现犯一个语病, 应该把记忆换成记忆力来着.

想不起事情发生的时间, 便翻开日历, 按着记忆中的大致顺序推算出时间, 然后再在日历中标个记号: xx月xx日, 雨

莫名其妙地哀伤, 只是自己的注意力很差, 所以在这种情绪中的时间没有很久, 只是偶尔地断断续续. 忽然想起书中的话来, 看来这又是思维在作怪: 它为了证明自己的存在而把”我”引入了这种悲伤的情绪之中. 只是这似乎又引出了另一个问题来: 我刚才得出的结论本身就是思维的产物: 它只是让”我”再次认识到了自己因为它而进入了悲伤的情绪当中. — 中止了这个似乎是死循环的思维活动. 一定有一个在思维层面上的问题无法用思维来解决, 那就停止思考这种问题吧.

现在迫切需要一个突破, 可是找不到那个点哎,

意义在哪里呀/ 意义在哪里/ 意义在那………

哈尔滨之行很温暖, 只是朋友相聚可短暂了: 一睁眼一闭眼见到了, 这再一睁眼一闭眼, 嗯哼~ 那就又散了.

有些事情我们总会反复无聊地提起, 不是我们out了, 而是太难忘.

北京帮走的有点急, 没有爽到, 不过stay还是相当能耍, 拿手项目没有丢, 大海有点萎靡, 一蹶不振呐, 木木表演很出彩, 大眼专心养伤, 楠楠说最近不能生育, 小强很有中年男人的安全感(感觉地…), 脐橙被再次提起.

哦哦, 最后最后一天, 吃到了美丽的新娘和高兴的新郎做的咖喱牛肉饭, 真的很好吃啊, 再另外晚饭后美丽的新娘还很贤惠的把桌子厨房打扫的很干净呢.

最后还看到了的美丽的江岸和水

把伞落在了南京, 准备再买把好的, 有些东西忍不住的想起,

准备有计划的开始学习, 要有点计划的追求些

最后再套用一句流行的话: 老子写的不是blog, 是寂寞!


© 2007 pangwa's Blog | iKon Wordpress Theme by Windows Vista Administration | Powered by Wordpress