IceskYsl@1sters!

程序员…

Archive for the ‘Android’ Category

http://www.eoeandroid.com/attachments/month_1006/100628151169669bb4f7b7d8c5.jpg
2010年6约27日,周日下午,由CSDN和《程序员》杂志联合策划组织,旨在与业界人士分享IT产品背后的技术和用户体验故事的线下活动TUP(Technology, User Experience, Product)系列活动日前在北京丽亭华苑酒店成功举办,首期活动以“移动开发实践”为主题。
受CSDN&《程序员》总编刘江邀请,我去分享了自己对android方面的一些体会和心得,本来预期200人参加的活动,从wudi那边看到报名的有500多人,最终选了300多人参与了活动,场面还是比较火爆的,到处站的都是人,CSDN在国内技术圈还是有不错影响力的;
活动从下午1电30分正式开始,刘江主持,介绍了TUP的核心价值,然后我是第一个演讲的,我和大家分享的题目是《Google Android盈利模式探析及其应用突围之道》,和大家分享了android目前的市场;可行的一些盈利模式,我的观点是现阶段,广告和应用中收费(注意不是收费应用)是两个比较成熟的模式,除此之外还有做平台,做培训,咨询等等模式可以尝试;借着和大家分享了应用突围之道,举了两个例子,说明如何让你的应用在众多应用中脱颖而出(分析数据很重要),最后和大家分享了android的发展趋势,我个人觉得android终端多元化,终端网络化的趋势很明显,那么带来的就是应用的巨大需求(个性化,国际化,本地化的),从而使得android人才缺口非常大。
从大家的提问和会后的交流来看,很多人还是比较迷茫的,对现况的迷茫,对市场的迷茫,比如国内外大大小小的软件商店很多人就看不明白,原因很简单,看到的都是表表象,透过表象,把握住本质就很清晰了。
比较冏的是名片带少了,后来给不少人手工写了联系方式,本来后面还有个互动交流的环节,由于临时有些事情,没来得及参加就撤退了,有些遗憾。
今天各大媒体的报道都出来,看到基本商都是用的我topic里的一个观点“andoid应用突”》做为报道点,希望大家能顺利突围!

  • 1 Comment
  • Filed under: Android
  • 带了一个moto 的 milestone回来,到家发现我的mac无法给他充电,查了好大一会,找到一个解决的办法,如下:

    按照http://blog.gruby.com/2006/11/27/charging-a-motorola-razr-over-usb/ 这个文章说的,下载一个motocharger.app.zip ,然后解压放在applications目录下,运行就可以充电了。

    原因不晓,感兴趣的自己链过去了解~

  • 1 Comment
  • Filed under: Android
  • 今天起了大大早,搬出十八般武器研究起android market的数据通讯,想看看是数据传输的方式以加以借鉴和参考。
    最终结果是Sniffer到数据通信了,但是无法破解其使用的协议,最终很多内容无法还原,如此看来其走的肯定是一套私有的协议,那么下一步就是,有时间的话反编译android market客户端的源代码,看看其协议是怎么样的。
    截图一张:
    TM截图未命名

    这篇文章是非技术性的,所以使用中文写,免得写了大家看不懂,呵呵。

    写书不是第一次,出版却是第一本,至于原因,就不详述了,去年9月开始参与一些图书的翻译和撰写中,截至到目前,这段时间一共参与了三本书,按照参与的先后顺序,分别是《The Rails Way》,《Google API 编程.开发.实例》以及《Google Android开发入门与实战》。

    其中《The Rails Way》是做为译者参与,其他翻译者都是国内第一批Rails技术人员,分散在全国各地,还有一名译者在加拿大,我一共翻译了5章内容,分别是第2章“Working_with_Controllers”,第10章“ActionView”,第13章“Session__Session_Management”,第15章“XML_and_ActiveResource”和第16章“ActionMailer”,翻译很早前就结束了,目前好像还在审稿、校核工作,由YiTan在跟,至于何时出版,我还真不知道。

    《Google API 编程.开发.实例》我是从去年9月份介入,开始参与选题和策划,截至撰写相关内容,因为我自身是Google重度使用者,平时也比较多的使用和了解GoogleAPI,所以写起来得心应手,一共写了“Google Account Authentication”,“Google AJAX Language API”,“Google Chart API”,“Blogger Data API”,“Feedburner API”,“Google Code Search Data API”和“Google Book Search Book Viewability API”这些章节,前前后后也花了不少零碎的时间。其他作者大多都Google内部的同学,本书已经进入出版流程,由博文视点出版社策划出版,应该在6.5号Google开发者大会上可以看到,如下是本书第一版封面。

    本书特点:本书覆盖了Google绝大多数的API,其中针对每个API就其原理、用法做了详细说明,最后基本上都有实际的例子演示如何使用。

    《Google Android开发入门与实战》是08年11月份开始撰写的,和另外一个朋友一起,两个人陆续的差不多用了半年时间,在09年4月份差不多全部写完,后面主要是都在校核和审稿,由人民邮电出版社出版,5月底6月初即可上市,封面如下:

    本书内容特点:     * 国内第一本原创Android图书     * 完全基于Android最新的SDK1.5     * 全书除了大量小型案例之外还包含了5个Android平台下的完整商业实例及源码分析,分别是RSS阅读器、      基于GoogleMap的个人GPS、豆瓣客户端、在线音乐播放器、手机信息助手     * 随书附赠的光盘中包含300分钟的详细教学视频以及Android开发必备的开发资源     * 读者对于此书内容的疑问可以访问http://www.eoeandroid.com社区,作者团队将会及时解答,不在这里解答,谢谢。
    
        样章下载:http://www.eoeandroid.com/viewthread.php?tid=314&extra=page%3D1    视频下载:http://www.eoeandroid.com/viewthread.php?tid=328&extra=page%3D1

    PS:

    这里只是我个人技术随笔,理论上不保证在这里解答图书中问题,如果你对图书有问题,

    请前往其支持社区“《Google Android开发入门与实战》专版”寻求解答;

    如果你想对我个人说些什么,那非常欢迎。

    Android have lots of intent,it’s powerful and useful,here is some tips for you:

    1,start web browser
    Uri myBlogUri = Uri.parse("http://kuikui.javaeye.com");
    returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri);

    2,Google map
    Uri mapUri = Uri.parse("geo:38.899533,-77.036476");
    returnIt = new Intent(Intent.ACTION_VIEW, mapUri);

    3,show dialer tel
    Uri telUri = Uri.parse("tel:100861");
    returnIt = new Intent(Intent.ACTION_DIAL, telUri);

    4,start call dialar
    Uri callUri = Uri.parse("tel:100861");
    returnIt = new Intent(Intent.ACTION_CALL, callUri);

    5,uninstall apk
    Uri uninstallUri = Uri.fromParts("package", "xxx", null);
    returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);

    6,install apk
    Uri installUri = Uri.fromParts("package", "xxx", null);
    returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

    7,play audio
    Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
    returnIt = new Intent(Intent.ACTION_VIEW, playUri);

    8,show send email ui
    Uri emailUri = Uri.parse("mailto:shenrenkui@gmail.com");
    returnIt = new Intent(Intent.ACTION_SENDTO, emailUri);

    9,send email
    returnIt = new Intent(Intent.ACTION_SEND);
    String[] tos = { "shenrenkui@gmail.com" };
    String[] ccs = { "shenrenkui@gmail.com" };
    returnIt.putExtra(Intent.EXTRA_EMAIL, tos);
    returnIt.putExtra(Intent.EXTRA_CC, ccs);
    returnIt.putExtra(Intent.EXTRA_TEXT, "body");
    returnIt.putExtra(Intent.EXTRA_SUBJECT, "subject");
    returnIt.setType("message/rfc882");
    Intent.createChooser(returnIt, "Choose Email Client");

    10,send sms
    Uri smsUri = Uri.parse("tel:100861");
    returnIt = new Intent(Intent.ACTION_VIEW, smsUri);
    returnIt.putExtra("sms_body", "shenrenkui");
    returnIt.setType("vnd.android-dir/mms-sms");

    11,send email
    Uri smsToUri = Uri.parse("smsto://100861");
    returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri);
    returnIt.putExtra("sms_body", "shenrenkui");

    12,send mms
    Uri mmsUri = Uri.parse("content://media/external/images/media/23");
    returnIt = new Intent(Intent.ACTION_SEND);
    returnIt.putExtra("sms_body", "shenrenkui");
    returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri);
    returnIt.setType("image/png"); 

    if you have other intent,please share to me ,thx.

    useful resource link here:

    http://kuikui.javaeye.com/blog/318627

    In some case,you may want do get  Uniquely Identifying  for a  ‘real’ android phone,such as IMEI code,SimOperator etc, and we all kown ,the IMEI like ID card,and you can use TelephonyManager to get it,some usefull codes like this :

    Java代码
    1. public void fetch_status(){  
    2.     TelephonyManager tm = (TelephonyManager) this  
    3.     .getSystemService(Context.TELEPHONY_SERVICE);//      
    4.     String str = "";  
    5.     str += "DeviceId(IMEI) = " + tm.getDeviceId() + "\n";    
    6.     str += "DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion() + "\n";    
    7.     str += "Line1Number = " + tm.getLine1Number() + "\n";    
    8.     str += "NetworkCountryIso = " + tm.getNetworkCountryIso() + "\n";    
    9.     str += "NetworkOperator = " + tm.getNetworkOperator() + "\n";    
    10.     str += "NetworkOperatorName = " + tm.getNetworkOperatorName() + "\n";    
    11.     str += "NetworkType = " + tm.getNetworkType() + "\n";    
    12.     str += "PhoneType = " + tm.getPhoneType() + "\n";    
    13.     str += "SimCountryIso = " + tm.getSimCountryIso() + "\n";    
    14.     str += "SimOperator = " + tm.getSimOperator() + "\n";    
    15.     str += "SimOperatorName = " + tm.getSimOperatorName() + "\n";    
    16.     str += "SimSerialNumber = " + tm.getSimSerialNumber() + "\n";    
    17.     str += "SimState = " + tm.getSimState() + "\n";    
    18.     str += "SubscriberId(IMSI) = " + tm.getSubscriberId() + "\n";    
    19.     str += "VoiceMailNumber = " + tm.getVoiceMailNumber() + "\n";    
    20.     TextView sys = (TextView) findViewById(R.id.sys);  
    21.     sys.setText(str);  
    22. }  

    and,your output like here.

    some userfull resource link:

    http://developer.android.com/reference/android/telephony/TelephonyManager.html

    In some case,you may want do get  Uniquely Identifying  for a  ‘real’ android phone,and you can do it like this:

    In Android.Provider.Settings.System we have some interesting values that could be of use, one specifically is “Android_ID”. From the documentation it is the following;

    String ANDROID_ID The Android ID (a unique 64-bit value) as a hex string. “android_id”

    C++代码
    1. import Android.Provider.Settings.System;  
    2. …  
    3. String Android_ID = System.getString(this.getContentResolver(), System.ANDROID_ID);  

    Also, note that in an emulator this will return “null”, though a real device will return an actual value. The nice thing about this tid-bit of code is that you are not required any special permissions to call it, since it’s essentially a passive call to get information. No write access is (obviously) required.

    Some userfull link resource come here:

    • http://strazzere.com/blog/?tag=android_id
    • http://groups.google.com/group/android-developers/browse_thread/thread/93d1c9333fae0e07
    • http://groups.google.com/group/android-developers/browse_thread/thread/ab70f142148e5801/0af3468a7d92d095?lnk=gst&q=%22mark+murphy%22
    • http://groups.google.com/group/android-developers/browse_thread/thread/c0d243345b90c8a5
    • http://code.google.com/intl/zh-CN/android/reference/android/provider/Settings.System.html#ANDROID_ID

     

    F:\keytools>”C:\Program Files\Java\jdk1.6.0_10\bin\jarsigner.exe” -verbose -keystore keys/iceskysl.keystore  -signedjar iTracks_signed.apk iTracks.apk iceskysl.keystore

    在Android中使用GoogleMap非常方便,但是有些小技巧或者注意事项你必须牢记,否则调试半天你也不会找到啥线索,浪费时间不说,更让你狂抓,以下技巧都是我在实际项目中遇到的,不断更新和维护,如果你有类似技巧,欢迎分享:

    (以下技巧是基于SDK 1.0的)

    一、申请Apikey,并放在正确的位置

    这个应该都知道,但是是申请得到的key放哪里很多人不知道,可以放在

    1、XML布局文件中

    <view android:id="@+id/mv"
       class="com.google.android.maps.MapView"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:layout_weight="1"
       android:apiKey="01Yu9W3X3vbpYT3x33chPXXX7U1Z6jy8WYZXNFA"
       />

    2、java中

            mMapView = new MapView(this, "01Yu9W3X3vbpYT3x33chPxxx7U1Z6jy8WYZXNFA");

    二、记得导入uses-library

    由于1.0版本的修改,使得map包不再是默认的了,使用的时候需要在manifest中的application节点下加入

    <uses-library android:name="com.google.android.maps" />

    否则,你将遇到可恶的“java.lang.NoClassDefFoundError: ”,切记!

    三、需要给予一定的权限

    因为要使用GoogleMAP的service,所以需要
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    如果需要GPS等应用,还需要

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

    四、Activity需要继承自MapActivity

    类似如下代码;

    package com.iceskysl.showmap;

    import com.google.android.maps.MapActivity;

    import android.os.Bundle;

    public class ShowMap extends MapActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }

        @Override
        protected boolean isRouteDisplayed() {
            // TODO Auto-generated method stub
            return false;
        }
    }

    Page::页面

    Calendar::日历

    September 2010
    M T W T F S S
    « Aug    
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  

    RSSTwitter: iceskysl