??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一区二区三区视频在线,免费成人av电影,精品一区日韩成人http://www.aygfsteel.com/caizh2009/category/45317.html与大家共同成?/description>zh-cnFri, 17 Dec 2010 22:27:11 GMTFri, 17 Dec 2010 22:27:11 GMT60Android获取Contact Number的例子(2.0pȝ以前的获取方式)http://www.aygfsteel.com/caizh2009/archive/2010/12/17/341010.html菜毛毛菜毛毛Fri, 17 Dec 2010 09:45:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/12/17/341010.htmlhttp://www.aygfsteel.com/caizh2009/comments/341010.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/12/17/341010.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/341010.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/341010.html
  • String[] projection = new String[] {  
  • People._ID,  
  • People.NAME,  
  • People.NUMBER,  
  • };  
  •   
  • // Get the base URI for People table in Contacts content provider.  
  • // which is: content://contacts/people/  
  • Uri contactUri = People.CONTENT_URI;  
  •   
  • // Best way to retrieve a query; returns a managed query.  
  • Cursor peopleCursor = managedQuery (contactUri,  
  • projection, //Which columns to return.  
  • null, // WHERE clause--we won't specify.  
  • null, // Selection Args??  
  • People.DEFAULT_SORT_ORDER); // Order-by name  
  •   
  • // go to the beginning of the list  
  • peopleCursor.moveToFirst();  
  •   
  •   
  • // So, here we have a contact. We need to get the contact ID (_id) then  
  • // build the Uri to get the phones section of that user's record  
  • // which is a subdirectory of a contact record  
  •   
  • long personId = peopleCursor.getLong(peopleCursor.getColumnIndex("_id"));  
  •   
  • Uri personUri = ContentUris.withAppendedId(contactUri, personId );  
  •   
  • // So now the URL looks like: content://contacts/people/_id(where the actual id of the record is here)  
  • Uri phoneUri=  
  • Uri.withAppendedPath(personUri, Contacts.People.Phones.CONTENT_DIRECTORY);  
  •   
  • // Now the URL looks like: content://contacts/people/_id/phones (where phones is literally "phones")  
  •   
  • // Now get all the phone numbers for this contact  
  • Cursor phonesCursor = managedQuery(phoneUri,  
  • null,  
  • null,  
  • null,  
  • Phones.DEFAULT_SORT_ORDER);  
  •   
  • // We now have a cursor for all the phone numbers for that User ID  
  • // go to the beginning of the phone list.  
  • phonesCursor.moveToFirst();   


  • 菜毛毛 2010-12-17 17:45 发表评论
    ]]>
    android 2.2 获取联系人,电话Qƈ拨号http://www.aygfsteel.com/caizh2009/archive/2010/12/17/341002.html菜毛毛菜毛毛Fri, 17 Dec 2010 08:58:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/12/17/341002.htmlhttp://www.aygfsteel.com/caizh2009/comments/341002.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/12/17/341002.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/341002.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/341002.html原创  android 2.2 获取联系人,电话Qƈ拨号 收藏

    该demo是第一ơ基于android开发?/p>

    主要功能有: d联系人姓名、号码,qlisetview 昄Q获取listview数据Qƈ发短信、或者拨?/p>

    package com.android.hello;

    import android.app.Activity;
    import android.content.Intent;   
    import android.database.Cursor;
    import android.graphics.Color;   
    import android.net.Uri;   
    import android.os.Bundle; 
    import android.telephony.PhoneNumberUtils; 
    import android.util.Log;   
    import android.view.View;   
    import android.widget.AdapterView;   
    import android.widget.LinearLayout;   
    import android.widget.ListAdapter;   
    import android.widget.ListView;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.Toast; 
    import android.provider.ContactsContract;

    import java.util.ArrayList;   
    import java.util.HashMap;
    import android.widget.SimpleAdapter;

    @SuppressWarnings("deprecation")
    public class hello extends Activity {
        /** Called when the activity is first created. */
       // @SuppressWarnings("deprecation")
    // @Override
     //  
     private static final String TAG="App";   
        ListView listView;   
        ListAdapter adapter;   
        /** Called when the activity is first created. */  
        @Override  
        public void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
           // setContentView(R.layout.main);   
            LinearLayout linearLayout=new LinearLayout(this);   
            linearLayout.setOrientation(LinearLayout.VERTICAL);   
            linearLayout.setBackgroundColor(Color.BLACK);   
            LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);   
               
            listView=new ListView(this);   
            listView.setBackgroundColor(Color.BLACK);   
               
            linearLayout.addView(listView,param);   
               
            this.setContentView(linearLayout);   
               
         
          //生成动态数l,加入数据
            ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();        
            ArrayList<HashMap<String, Object>> listItemRead = new ArrayList<HashMap<String, Object>>();     
            Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);      
            while (cursor.moveToNext())    
            {     
             HashMap<String, Object> map = new HashMap<String, Object>();
             String phoneName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
             map.put("ItemTitle", phoneName);//电话姓名
             String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));   
                String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));   
                
                if (hasPhone.compareTo("1") == 0)    
                {   
                    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);        
                    while (phones.moveToNext())    
                    {      
                     String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));       
                        String phoneTpye = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));       
                       
                        map.put("ItemText", phoneNumber); // 多个L如何处理
                        
                        Log.d(TAG,"testNum="+ phoneNumber + "type:"+phoneTpye); 
                    }        
                    phones.close();       
                }       
                Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);   
                while (emails.moveToNext())    
                {                    
                    String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));   
                    String emailType = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));      

                    Log.d(TAG,"testNum="+ emailAddress + "type:"+emailType); 
                }       
                emails.close();
                
                listItem.add(map); 
            }
            
            //生成适配器的Item和动态数l对应的元素   
            SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//数据?nbsp;   
                android.R.layout.simple_list_item_2,//ListItem的XML实现   
                //动态数l与ImageItem对应的子?nbsp;          
                new String[] {"ItemTitle", "ItemText"},    
                //ImageItem的XML文g里面的一个ImageView,两个TextView ID   
                new int[] {android.R.id.text1,android.R.id.text2}   
            );              
            
            listView.setAdapter(listItemAdapter);   
            cursor.close();  
            
            //listView.setEmptyView(findViewById(R.id.empty));   
               
            listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){   
      
                public void onItemSelected(AdapterView<?> arg0, View arg1,   
                        int arg2, long arg3) {   
                    // TODO Auto-generated method stub   
                    //openToast("滚动刎ͼ"+arg0.getSelectedItemId());   
                    //短信发?nbsp;  
                 setTitle("选择"+arg2+"目");
                 openToast("选择"+arg0.getSelectedItemId()+"目");
        RelativeLayout lr = (RelativeLayout) arg1;
        TextView mText = (TextView) lr.getChildAt(1);
        openToast(mText.getText().toString());

        String number = mText.getText().toString();
        Log.d(TAG, "number=" + number);
        // 判断电话L的有效?br />     if (PhoneNumberUtils.isGlobalPhoneNumber(number)) {
         Intent intent = new Intent(Intent.ACTION_SENDTO, Uri
           .parse("smsto://" + number));
         intent.putExtra("sms_body", "The SMS text");
         startActivity(intent);             
        } 
                }   
      
                public void onNothingSelected(AdapterView<?> arg0) {   
                    // TODO Auto-generated method stub   
                       
                }   
                   
            });  
            
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){  

       public void onItemClick(AdapterView<?> arg0, View arg1,
         int position, long arg3) {
        // TODO Auto-generated method stub
        // openToast("Click"+Integer.toString(position+1)+"目");
        RelativeLayout lr = (RelativeLayout) arg1;
        TextView mText = (TextView) lr.getChildAt(1);
        openToast(mText.getText().toString());

        String number = mText.getText().toString();
        Log.d(TAG, "number=" + number);
        // 判断电话L的有效?br />     if (PhoneNumberUtils.isGlobalPhoneNumber(number)) {
         Intent intent = new Intent(Intent.ACTION_DIAL, Uri
           .parse("tel://" + number));
         startActivity(intent);
        }
       }
      });
     }
     
        private void openToast(String str){   
            Toast.makeText(this,str,Toast.LENGTH_SHORT).show();   
        }   



    菜毛毛 2010-12-17 16:58 发表评论
    ]]>
    Android中添加Admobq告Q{http://www.aygfsteel.com/caizh2009/archive/2010/12/10/340283.html菜毛毛菜毛毛Fri, 10 Dec 2010 09:42:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/12/10/340283.htmlhttp://www.aygfsteel.com/caizh2009/comments/340283.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/12/10/340283.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/340283.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/340283.html׃整整一天时_研究怎么通过?font style="background-color: #00ffff;">Android应用E序中添加Admobq告来赚钱。网上也有些教程Q不q说得不够详l,自己q得花时间摸索。ؓ了让后来者能更快开始Admobq告赚钱Q所以写个详l一点的教程Q供大家参考?/p>

    例子工程源码下蝲地址Q?使用览器自带的下蝲工具下蝲)http://cid-cb78b387364ae9a7.skydrive.live.com/browse.aspx/.Public/%e8%bd%af%e4%bb%b6/Andoroid
    当然Q我也参考了一些网上的资料Q主要有Q?/p>

    AdMobQ在android应用中嵌入广告的Ҏ
    如何?font style="background-color: #00ffff;">Android Market赚钱 part 2 - 免费app附带q告
    Publisher Starter Kit
    面向开发?Wiki ?AdMob

    好了Q现在让我从头开始说?#8230;…在这之前Q你不需要有M的帐P唯一需要的是有一个有效的email邮箱。只要按照下面的步骤一步步来,你就能通过Admob的广告插到自qE序中赚钱啦Q?/p>

    首先Q当然是需要注册一个Admob的帐受Admob的主|Q?a >http://www.admob.com/ ?当然Q如果你对于览英文|页q有些障的话,可以d中文|站Q?a >http://zhcn.admob.com/ 。如果网站的文字q是英文Q你可以在网站主늚右下角的“Language”处,选择“中文Q简体)”。点击进入注册页面后Q有一些栏目需要填写,不要? q疑虑,像你注册一个论坛一P随便填下好了。最关键的是保证填写的email地址有效Q另外就是填上姓名,选择语言。帐L型我选择?#8220;不确?#8221;Q? 语言“中文Q简体)”?提交注册甌之后Q不久你׃收到用于认q激zdL电子邮gQ点Lz链接,可以了ȀzM的Admob帐号了~

    W二步就是设|你?font style="background-color: #00ffff;">Android? 用程序信息,q获得Admob的插入代码。登录你的Admob帐号后,在主늚左上方(Logo上面Q点?#8220;MarketplaceQ手机广告市场)”Q? q入面后,?#8220;Sites&AppsQ站点和应用E序Q?#8221;标签下,点击“Add Site/App”。选择我们熟悉的图标—? Android App ” 。这时会出现需要你填写一?#8220;详细信息”Q随便填上一些信息。(不要太过在意现在填写的东西,因ؓq些以后都是可以修改的)。比?#8220;Android Package URL” 我到现在都还没有填写Q描qCcȝQ想写就写点吧。填好详l信息后Q点?#8220;l箋”Q就可以到AdMob Android SDK 的下载页面了。下载这个SDKQ当Ӟq个很重要)?/p>

    The AdMob Android SDK includes:

    README: Get started with AdMob Android ads!
    AdMob Jar file: Required for publishing ads. Follow the documentation in javadoc/index.html and drop the AdMob Jar file into your project.
    Sample Projects: Examples of AdMob Android ads shown in the LunarLander application.

    W三步获取你的应用程序对应的Publisher ID。在下蝲面点击"Go to Sites/Apps"可以到你应用程序的理界面了。这时你会发现在q个面醒目的位|会有一个叫你填写详l信息的提示Q?/p>

    在我们发送Q何有待收入之前,您需要填写技术联p详l信息和付款首选项?/p>

    我们暂时可以不用它Q因为钱是会存在我们的Admob的̎户上的,{我们需要提现的时候,或者你惛_的时候再填就可以了。在下面的列表中Q选择? 的应用程序ƈq入。这个界面就是你的应用程序广告的理界面了,里面有比较多的功能,以后可以慢慢了解Q现在我们只需要知道两个东西,一个是发布? IDQPublisher IDQ,一个是你程序的状态。Publisher ID是一?5个字W的字符Ԍ而你E序的状态现在应该还是不zdQInactiveQ。我们下面要做的是怎么让它变ؓActive?/p>

    W四步代码编写——在你的应用E序中插入Admobq告。经q上面的步骤Q我们在|站上的讄告一个段落了Q现在我们终于要q入主题了,如何在自qAndroid应用E序中插入Admobq告。如果你不健忘的话,一定还记得我们之前下蝲的那个AdMob Android SDK 。解压它Q看看里面有些什么东ѝ这里面最重要的就是那个名?#8220;admob-sdk-android.jar”的包啦,Admob如何把q告加蝲?font style="background-color: #00ffff;">Android应用E序中的代码集成在这个包里,我们~写E序的时候就需要将q个包导入到我们的工E里面去。另外,解压出来的文件夹中还有一个名?#8220;javadoc”的文件夹Q打开它里面的index.html。它是关于Admob Android SDK的帮助文档,在Package 下的Setup下,有详l完整的在自q应用E序中插入广告的Ҏ介绍Q在q里我就hQ引用一下~


    Including the Jar
    Add the Jar file included with the SDK to your Android project as an external library. In your project's root directory create a subdirectory libs (this will already be done for you if you used Android's activitycreator). Copy the AdMob Jar file into that directory. For Eclipse projects:

    Go to the Properties of your project (right-click on your project from the Package Explorer tab and select Properties)
    Select "Java Build Path" from left panel
    Select "Libraries" tab from the main window
    Click on "Add JARs..."
    Select the JAR copied to the libs directory
    Click "OK" to add the SDK to your android project

    注意Q需要首先在你工E的根目录下新徏一个叫?#8220;libs”的文件夹Qƈ把之前所说的最重要的东?#8220;admob-sdk-android.jar”复制到里面?/p>


    AndroidManifest.xml

    Your AdMob publisher ID was given to you when creating your publisher account on www.admob.com before downloading this code. It is a 15-character code like a1496ced2842262. Just before the closing </application> tag add a line to set your publisher ID:


                    <!-- The application's publisher ID assigned by AdMob -->
                    <meta-data android:value="YOUR_ID_HERE" android:name="ADMOB_PUBLISHER_ID" />
            </application>
    Set any permissions not already included just before the closing </manifest> tag:
                    <!-- AdMob SDK permissions -->
                    <uses-permission android:name="android.permission.INTERNET" />
                    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
            </manifest>

    Only the INTERNET permission is required. Setting ACCESS_COARSE_LOCATION (and/or ACCESS_FINE_LOCATION) allows narrowly geo-targeted ads be shown.

    q里需要注意的是,<meta-data android:value="YOUR_ID_HERE" android:name="ADMOB_PUBLISHER_ID" />中,我们只需要改的是"YOUR_ID_HERE"。这里需要你填上的ID是我们之前在Admob|站我们的应用程序管理页面上看到? Publisher IDQ而name="ADMOB_PUBLISHER_ID"是不应该改的。程序需要这个Key来查扑֯应的Value?/p>

    attrs.xml
    The attrs.xml file specifies custom AdView attributes in XML layout files. If your application does not already have an /res/values/attrs.xml file then create one and copy-and-paste the following into it. If you do have that file then just add the declare-styleable element:


            <?xml version="1.0" encoding="utf-8"?>
            <resources>
                    <declare-styleable name="com.admob.android.ads.AdView">
                            <attr name="testing" format="boolean" />
                            <attr name="backgroundColor" format="color" />
                            <attr name="textColor" format="color" />
                            <attr name="keywords" format="string" />
                            <attr name="refreshInterval" format="integer" />
                            <attr name="isGoneWithoutAd" format="boolean" />
                    </declare-styleable>
            </resources>

    q个Q没什么说的?/p>


    Placing an AdView in a Layout
    AdView widgets can be put into any XML layout now. The first step is to reference attrs.xml in your layout element by adding an xmlns line that includes your package name specified in AndroidManifest.xml:


            xmlns:yourapp=http://schemas.android.com/apk/res/yourpackage

    For example a simple screen with only an ad on it would look like:


            <?xml version="1.0" encoding="utf-8"?>
            <LinearLayout
                    xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:admobsdk="http://schemas.android.com/apk/res/com.admob.android.example"
                    android:orientation="vertical"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent">
       
                    <com.admob.android.ads.AdView
                            android:id="@+id/ad"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            admobsdk:backgroundColor="#000000"
                            admobsdk:textColor="#FFFFFF"
                            admobsdk:keywords="Android application"
                    />
                           
            </LinearLayout>

    q里好像也没什么需要特别注意的Q注意加上xmlnsQ另外知道这里可以设|一个keywords

    Test Mode
    When you start integrating AdMob ads into your application it is recommended to use test mode. This always returns the same ad. Normal ad requests are not deterministic making it harder to be sure the ad view looks like you want (e.g. ad requests can timeout or may not fill).

    Once the ad shows up as you expect be sure to turn test mode off to get real ads. Never put your application into the Android Market with test mode enabled.

    Test mode can be enabled either by calling AdManager.setInTestMode(true) or by adding a "admobsdk:testing="true"" property to the ad in your XML layout (where "admobsdk" is the XML namespace for your application).


    讄Test Modeq个很关键,千万别将处于Test Mode的程序发布出MQ那样可赚不了钱啊~Q如果在AdView的属性中不加上admobsdk:testing="false"Q似乎程序也是不处于Test Mode的,不过最好还是加上吧?/p>

    W五步编译运行,q激zȝ序。编译运行你的程序,在模拟器上就可以看到效果啦~Q当然你的模拟器需要能上网Q关于怎么让模拟器上网呢?用\q应该 可以直接上,如果不是用\由,那么可能需要设|下Q具体方法大家自q上搜吧,具体忘了Q。如果你的应用程序能昄出广告,那么恭喜你,你的应用E序很快 ׃在Admob上被ȀzMQ需要一定的旉Q我的好像花了一个小时不刎ͼQ?/p>

    W六步在Admob|站上查看应用程序赚了多钱?#8220;手机q告市场”?gt;“报告”?gt;“站点和应用程序报?#8221;。选择你的应用E序Q然后点击页面最下面?#8220;创徏报告”?OKQ赚钱啦?/p>

    最后,我把我自己写的一个例子工E上传上来,大家可以下蝲来参考下。另外,我的工程广告作为移动的Qƈ且改变了它默认的宽度和背景,希望对如何在应用E序中摆攑ֹ告,起到一个抛砖引玉的作用。效果图如下Q哈哈,在模拟器跑的~)Q?/p>



    1.http://www.admob.com/注册一个帐P

    dAdd Mobile Site/appQ输入相关信息后Q提交完成,

    下蝲Androidq_使用的JARQ查看发布?ID?/p>

    2.然后JARdC的项目中

    Properties->Java Build Path->Libraries->Add JARs…->Select the JAR->OK

    3.~辑AndroidManifest.xml

    application节点中添?/p>

    <!– The application’s publisher ID assigned by AdMob –>

    <meta-data android:value=”a14ae1ce0357305″ android:name=”ADMOB_PUBLISHER_ID” />

    manifest节点d权限甌

    <!– AdMob SDK permissions –>

    <uses-permission android:name=”android.permission.INTERNET” />

    4.dattrs.xml

    /res/values/attrs.xml

    <?xml version=”1.0″ encoding=”utf-8″?>

    <resources>

    <declare-styleable name=”com.admob.android.ads.AdView”>

    <attr name=”testing” format=”boolean” />

    <attr name=”backgroundColor” format=”color” />

    <attr name=”textColor” format=”color” />

    <attr name=”keywords” format=”string” />

    <attr name=”refreshInterval” format=”integer” />

    <attr name=”isGoneWithoutAd” format=”boolean” />

    </declare-styleable>

    </resources>

    5.dq告lg

    <?xml version=”1.0″ encoding=”utf-8″?>

    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”

    xmlns:admobsdk=”http://schemas.android.com/apk/res/com.moandroid.livesports”

    android:orientation=”vertical”

    android:layout_width=”fill_parent”

    android:layout_height=”fill_parent”

    >

    <TextView

    android:layout_width=”fill_parent”

    android:layout_height=”wrap_content”

    android:text=”@string/hello”

    />

    <com.admob.android.ads.AdView

    android:id=”@+id/ad”

    android:layout_width=”fill_parent”

    android:layout_height=”wrap_content”

    admobsdk:backgroundColor=”#000000″

    admobsdk:textColor=”#FFFFFF”

    admobsdk:keywords=”Android application”

    admobsdk:refreshInterval=”60″

    />

    </LinearLayout>

    6.昄效果

    为免费app嵌入Admobq告Q进而获得广告收入?/p>

    adm



    菜毛毛 2010-12-10 17:42 发表评论
    ]]>
    区分Activity的四U加载模?/title><link>http://www.aygfsteel.com/caizh2009/archive/2010/12/10/340227.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Fri, 10 Dec 2010 02:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/archive/2010/12/10/340227.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/340227.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/archive/2010/12/10/340227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/340227.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/340227.html</trackback:ping><description><![CDATA[http://marshal.easymorse.com/archives/2950 <div> <p>在多Activity开发中Q有可能是自己应用之间的Activity跌{Q或者夹带其他应用的可复用Activity。可能会希望跌{到原来某个Activity实例Q而不是生大量重复的Activity?/p> <p>q需要ؓActivity配置特定的加载模式,而不是用默认的加蝲模式?/p> <h4>加蝲模式分类及在哪里配置</h4> <p>Activity有四U加载模式:</p> <ul> <li>standard</li> <li>singleTop</li> <li>singleTask</li> <li>singleInstance</li> </ul> <p>讄的位|在AndroidManifest.xml文g中activity元素的android:launchMode属性:</p> <blockquote> <p><activity android:name="ActB" <strong>android:launchMode</strong>="singleTask"></activity></p> </blockquote> <p>也可以在Eclipse ADT中图形界面中~辑Q?/p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb54.png" border="0" height="144" width="498" /></a> </p> <p> </p> <p>区分Activity的加载模式,通过CZ一目了然。这里编写了一个Activity AQActAQ和Activity BQActBQ@环蟩转的例子。对加蝲模式修改和代码做E微改动Q就可以说明四种模式的区别?/p> <h4>standard</h4> <p>首先说standard模式Q也是默认模式Q不需要配|launchMode。先只写一个名为ActA的ActivityQ?/p> <blockquote> <p>package com.easymorse.activities; </p> <p>import android.app.Activity; <br /> import android.content.Intent; <br /> import android.os.Bundle; <br /> import android.view.View; <br /> import android.view.View.OnClickListener; <br /> import android.widget.Button; <br /> import android.widget.LinearLayout; <br /> import android.widget.TextView; </p> <p>public class ActA extends Activity { <br />     /** Called when the activity is first created. */ <br />     @Override <br />     public void onCreate(Bundle savedInstanceState) { <br />         super.onCreate(savedInstanceState); <br />         TextView textView = new TextView(this); <br />         textView.setText(this + ""); <br />         Button button = new Button(this); <br />         button.setText("go actA"); <br />         button.setOnClickListener(new OnClickListener() { <br />             @Override <br />             public void onClick(View v) { <br />                 Intent intent = new Intent(); <br />                 intent.setClass(ActA.this, ActA.class); <br />                 startActivity(intent); <br />             } <br />         }); <br />         LinearLayout layout = new LinearLayout(this); <br />         layout.setOrientation(LinearLayout.VERTICAL); <br />         layout.addView(textView); <br />         layout.addView(button); <br />         this.setContentView(layout); <br />     } <br /> }</p> </blockquote> <p>例子中都没有用layoutQ免得看着|嗦。可见是ActA –> ActA的例子。在界面中打印出对象的toString值可以根据hash code识别是否创徏新ActA实例?/p> <p>W一个界面:</p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb55.png" border="0" height="101" width="244" /></a> </p> <p>点击按钮后:</p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb56.png" border="0" height="114" width="244" /></a> </p> <p>可以多点几次。发现每ơ都创徏了该Activity的新实例。standard的加载模式就是这LQintent发送给新的实例?/p> <p>现在点Android讑֤的回退键,可以看到是按照刚才创建Activity实例的倒序依次出现Q类似退栈的操作Q而刚才操作蟩转按钮的q程是压栈的操作。如下图Q?/p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb57.png" border="0" height="233" width="244" /></a> </p> <h4>singleTop</h4> <p>singleTop和standard模式Q都会将intent发送新的实例(后两U模式不发送到新的实例Q如果已l有了的话)。不 q,singleTop要求如果创徏intent的时候栈已l有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例?/p> <p>q是用刚才的CZQ只需launchMode改ؓsingleTopQ就能看到区别?/p> <p>q行的时候会发现Q按多少遍按钮,都是相同的ActiA实例Q因实例在栈Ӟ因此不会创徏新的实例。如果回退Q将退出应用?/p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb58.png" border="0" height="144" width="244" /></a> </p> <p>singleTop模式Q可用来解决栈顶多个重复相同的Activity的问题?/p> <p>如果是A Activity跌{到B ActivityQ再跌{到A ActivityQ行为就和standard一样了Q会在B Activity跌{到A Activity的时候创建A Activity的新实例Q因为当时的栈顶不是A Activity实例?/p> <p>ActAcȝ作改动:</p> <blockquote> <p>package com.easymorse.activities; </p> <p>import android.app.Activity; <br /> import android.content.Intent; <br /> import android.os.Bundle; <br /> import android.view.View; <br /> import android.view.View.OnClickListener; <br /> import android.widget.Button; <br /> import android.widget.LinearLayout; <br /> import android.widget.TextView; </p> <p>public class ActA extends Activity { <br />     /** Called when the activity is first created. */ <br />     @Override <br />     public void onCreate(Bundle savedInstanceState) { <br />         super.onCreate(savedInstanceState); <br />         TextView textView = new TextView(this); <br />         textView.setText(this + ""); <br />         Button button = new Button(this); <br />         button.setText("go actB"); <br />         button.setOnClickListener(new OnClickListener() { <br />             @Override <br />             public void onClick(View v) { <br />                 Intent intent = new Intent(); <br />                 intent.setClass(ActA.this, ActB.class); <br />                 startActivity(intent); <br />             } <br />         }); <br />         LinearLayout layout = new LinearLayout(this); <br />         layout.setOrientation(LinearLayout.VERTICAL); <br />         layout.addView(textView); <br />         layout.addView(button); <br />         this.setContentView(layout); <br />     } <br /> }</p> <p> </p> </blockquote> <p>ActBc:</p> <blockquote> <p>package com.easymorse.activities; </p> <p>import android.app.Activity; <br /> import android.content.Intent; <br /> import android.os.Bundle; <br /> import android.view.View; <br /> import android.view.View.OnClickListener; <br /> import android.widget.Button; <br /> import android.widget.LinearLayout; </p> <p>public class ActB extends Activity { <br />     @Override <br />     protected void onCreate(Bundle savedInstanceState) { <br />         super.onCreate(savedInstanceState); <br />          Button button=new Button(this); <br />             button.setText("go actA"); <br />             button.setOnClickListener(new OnClickListener() { <br />                 @Override <br />                 public void onClick(View v) { <br />                     Intent intent=new Intent(); <br />                     intent.setClass(ActB.this, ActA.class); <br />                     startActivity(intent); <br />                 } <br />             }); <br />             LinearLayout layout=new LinearLayout(this); <br />             layout.addView(button); <br />             this.setContentView(layout); <br />     } <br /> }</p> <p> </p> </blockquote> <p>ActBcM用默认(standardQ加载,ActA使用singleTop加蝲。结果类g图:</p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb59.png" border="0" height="211" width="244" /></a> </p> <p>如果把ActA的加载模式改为standardQ情况一栗?/p> <h4>singleTask</h4> <p>singleTask模式和后面的singleInstance模式都是只创Z个实例的?/p> <p>当intent到来Q需要创建singleTask模式Activity的时候,pȝ会检查栈里面是否已经有该Activity的实例。如果有直接intent发送给它?/p> <p>把上面singleTop的实例中的ActA的launchMode改ؓsingleTaskQActB的改为standard。那么会发现在ActA界面中按一ơ按钮:</p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb60.png" border="0" height="217" width="244" /></a> </p> <p>然后在ActB1界面中按按钮Q因为ActA是singleTaskQ会使用原来的ActA1实例。这时候栈内的情况:</p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb61.png" border="0" height="134" width="244" /></a></p> <p>如果多次按按钮蟩转,会发现始l只有ActA1q一个ActAcȝ实例?</p> <h4>singleInstance</h4> <p>解释singleInstance模式比较ȝ?/p> <p>首先要说一下TaskQQ务)的概c?/p> <p>如果是Swing或者WindowsE序Q可能有多个H口可以切换Q但是你无法在自q序中复用人家的窗口。注意是直接复用人家的二q制代码Q不是你拿到人家api后的源代码调用?/p> <p>Android可以做到Q让别h的程序直接复用你的ActivityQ类似桌面程序的H口Q?/p> <p>Android为提供这U机Ӟ引入了Task的概cTask可以认ؓ是一个栈Q可攑օ多个Activity。比如启动一个应用,那么 Android创Z一个TaskQ然后启动这个应用的入口ActivityQ就是intent-filter中配|ؓmain和launch的那? Q见<a title="一个APK文g部v产生多个应用安装的效?>一个APK文g部v产生多个应用安装的效?/a>Q。这个Activity是根QRootQActivityQ可能会在它的界面调用其他ActivityQ这些Activity如果按照上面那三个模式,也会在这个栈QTaskQ中Q只是实例化的策略不同而已?/p> <p>验证的办法是调用和打印Activity的taskIdQ?/p> <blockquote> <p>TextView textView2 = new TextView(this); <br /> textView2.setText("task id: "+this.getTaskId());</p> </blockquote> <p>会发玎ͼ无论切换ActivityQtaskId是相同的?/p> <p>当然也可以在q个单一的Task栈中Q放入别人的ActivityQ比如google地图Q这LLq地图按回退键的时候,会退栈回到调用地囄Activity。对用户来说Qƈ不觉得在操作多个应用。这是Task的作用?/p> <p>但是Q有q样的需求,多个Task׃n一个ActivityQsingleTask是在一个task中共享一个ActivityQ?/p> <p>现成的例子是google地图。比如我有一个应用是导游斚w的,其中调用的google地图Activity。那么现在我比如按home键,然后到应用列表中打开google地图Q你会发现显C的是刚才的地图,实际上是同一个Activity?/p> <p>如果使用上面三种模式Q是无法实现q个需求的。google地图应用中有多个上下文ActivityQ比如\U查询等的,导游应用也有一些上下文Activity。在各自应用中回退要回退到各自的上下文Activity中?/p> <p>singleInstance模式解决了这个问题(l了q么半天才说到正题)。让q个模式下的Activity单独在一个task栈中。这个栈只有一个Activity。导游应用和google地图应用发送的intent都由q个Activity接收和展C?/p> <p>q里又有两个问题Q?/p> <ul> <li>如果是这U情况,多个task栈也可以看作一个应用。比如导游应用启动地图ActivityQ实际上是在导游应用task栈之? singleInstance模式创徏的(如果q没有的话,如果有就是直接显C它Q一个新栈,当这个栈里面的唯一ActivityQ地图Activity 回退的时候,只是把这个栈Ud了,q样q到导游应用刚才的Activity了;</li> <li>多个应用QTaskQ共享一个Activity要求q些应用都没有退出,比如刚才要用home键从导游应用切换到地囑ֺ用。因为,如果退出导游应用,而这时也地图应用q未q行的话Q那个单独的地图ActivityQtaskQ也会退Z?/li> </ul> <p>如果q是拿刚才的ActA和ActB的示例,可以把ActB的模式改为singleInstanceQActA为standardQ如果按一ơ按钮切换到ActBQ看到现象用C意囄DP</p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb62.png" border="0" height="222" width="244" /></a> </p> <p>如果是第一ơ按钮切换到ActBQ在ActB在按按钮切换到ActAQ然后再回退Q示意图是:</p> <p><a ><img style="border: 0px none; display: inline;" title="image" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/07/image_thumb63.png" border="0" height="166" width="342" /></a> </p> <p>另外Q可以看C个Activity的taskId是不同的?/p> </div> <img src ="http://www.aygfsteel.com/caizh2009/aggbug/340227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2010-12-10 10:38 <a href="http://www.aygfsteel.com/caizh2009/archive/2010/12/10/340227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_֓Android源码推荐http://www.aygfsteel.com/caizh2009/archive/2010/12/03/339710.html菜毛毛菜毛毛Fri, 03 Dec 2010 04:39:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/12/03/339710.htmlhttp://www.aygfsteel.com/caizh2009/comments/339710.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/12/03/339710.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/339710.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/339710.html从零开始Android游戏~程
    五子源?/a>
    Read RSS on OPhone
    俄罗斯方?/a>
    I战游戏1945
    加速传感器演示
    演示如何使用Location和Google Map
    个股宝典
    q连?/a>
    {略游戏——回到战?android源代?/a>
    滚屏动作游戏——太IZ卫战 android源代?/a>
    冒险游戏——胜利大逃亡 android源代?/a>
    体育游戏——疯狂?android源代?附g
    水L效应android源码
    Android ?D赛R游戏
    扫雷游戏Qandroid源码Q有注解
    MP3切割?/a>
    Android国际象棋源码
    旅行记录软g源码
    DroidReader 源码
    Android下的VOIP客户端源?/a>
    Android下的FTP服务器源?/a>
    Android下俄|斯方块源码

    菜毛毛 2010-12-03 12:39 发表评论
    ]]>
    Android高手q阶教程(??---Android 中自定义属?attr.xml,TypedArray)的?(?http://www.aygfsteel.com/caizh2009/archive/2010/11/23/338805.html菜毛毛菜毛毛Tue, 23 Nov 2010 07:22:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/23/338805.htmlhttp://www.aygfsteel.com/caizh2009/comments/338805.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/23/338805.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338805.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338805.html阅读全文

    菜毛毛 2010-11-23 15:22 发表评论
    ]]>
    Android高手q阶教程(??---Android 中LayoutInflater的用(转)http://www.aygfsteel.com/caizh2009/archive/2010/11/23/338803.html菜毛毛菜毛毛Tue, 23 Nov 2010 07:20:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/23/338803.htmlhttp://www.aygfsteel.com/caizh2009/comments/338803.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/23/338803.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338803.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338803.html阅读全文

    菜毛毛 2010-11-23 15:20 发表评论
    ]]>
    为程序添加版本自动更新功??详细分析)http://www.aygfsteel.com/caizh2009/archive/2010/11/23/338763.html菜毛毛菜毛毛Tue, 23 Nov 2010 03:07:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/23/338763.htmlhttp://www.aygfsteel.com/caizh2009/comments/338763.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/23/338763.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338763.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338763.htmlOverView:
    E序通过后台每天查是否有最新版本,如果需要更新当前版本,弹出对话框让用户选择是否在当前通过Market来更?span class="t_tag">软g?br /> Knowledge Points:
    • SharedPreferences: 一个轻量的存储方法,cM于经怋用的.ini文gQ它也是通过索关键字来取得相应的数倹{之所以是成ؓ轻量U,是因为它所?span class="t_tag">应用的数值类型有限,对于存储较大数|效率相对较低?a target="_blank">官方参?/a>
    • System.currentTimeMillis:当?span class="t_tag">旉以毫U作为单位来表示Q用于比较两个时间的先后序。(其数DCZ1970-01-01 00:00:00直到当前旉的LU数Q?a target="_blank">官方参?/a>
    • 通过|络来读取信息:在checkUpdate()Ҏ中包含了通过制定的URL来读取网l资源。具体操作步骤,请参考源代码?/li>
    • Runnable: 在其内部的Run()Ҏ中实现所要执行的M代码Q当q个runnable interface被调用后可以视作为新的线E?/li>
    Source CodeQ?/strong>
    1. public class hello extends Activity  {
    2.         /** Called when the activity is first created. */
    3.         private Handler mHandler;
    4.          
    5.     @Override
    6.     public void onCreate(Bundle savedInstanceState) {
    7.         super.onCreate(savedInstanceState);
    8.         setContentView(R.layout.main);
    9.         
    10.         mHandler = new Handler();

    11.         /* Get Last Update Time from Preferences */
    12.         SharedPreferences prefs = getPreferences(0);
    13.         long lastUpdateTime =  prefs.getLong("lastUpdateTime", System.currentTimeMillis());

    14.         int curVersion = 0;
    15.                 try {
    16.                         curVersion = getPackageManager().getPackageInfo("linhai.com.hello", 0).versionCode;
    17.                 } catch (NameNotFoundException e) {
    18.                         // TODO Auto-generated catch block
    19.                         e.printStackTrace();
    20.                 }
    21.         Log.i("DEMO",String.valueOf(curVersion));
    22.         /* Should Activity Check for Updates Now? */
    23.         if ((lastUpdateTime + (24 * 60 * 60 * 1000)) < System.currentTimeMillis()) {

    24.             /* Save current timestamp for next Check*/
    25.            lastUpdateTime = System.currentTimeMillis();
    26.             SharedPreferences.Editor editor = getPreferences(0).edit();
    27.             editor.putLong("lastUpdateTime", lastUpdateTime);
    28.             editor.commit();      

    29.             /* Start Update */
    30.          //   checkUpdate.start();
    31.         }
    32.     }

    33.     /* This Thread checks for Updates in the Background */
    34.     private Thread checkUpdate = new Thread()
    35.     {
    36.         public void run() {
    37.             try {
    38.                 URL updateURL = new URL("http://my.company.com/update");
    39.                 URLConnection conn = updateURL.openConnection();
    40.                 InputStream is = conn.getInputStream();
    41.                 BufferedInputStream bis = new BufferedInputStream(is);
    42.                 ByteArrayBuffer baf = new ByteArrayBuffer(50);

    43.                 int current = 0;
    44.                 while((current = bis.read()) != -1){
    45.                      baf.append((byte)current);
    46.                 }

    47.                 /* Convert the Bytes read to a String. */
    48.                 final String s = new String(baf.toByteArray());        

    49.                 /* Get current Version Number */
    50.                 int curVersion = getPackageManager().getPackageInfo("your.app.id", 0).versionCode;
    51.                 int newVersion = Integer.valueOf(s);

    52.                 /* Is a higher version than the current already out? */
    53.                 if (newVersion > curVersion) {
    54.                     /* Post a Handler for the UI to pick up and open the Dialog */
    55.                     mHandler.post(showUpdate);
    56.                 }
    57.             } catch (Exception e) {
    58.             }
    59.         }
    60.     };

    61.     /* This Runnable creates a Dialog and asks the user to open the Market */
    62.     private Runnable showUpdate = new Runnable(){
    63.            public void run(){
    64.             new AlertDialog.Builder(hello.this)
    65.             .setIcon(R.drawable.ok)
    66.             .setTitle("Update Available")
    67.             .setMessage("An update for is available!\n\nOpen Android Market and see the details?")
    68.             .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    69.                     public void onClick(DialogInterface dialog, int whichButton) {
    70.                             /* User clicked OK so do some stuff */
    71.                             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:your.app.id"));
    72.                             startActivity(intent);
    73.                     }
    74.             })
    75.             .setNegativeButton("No", new DialogInterface.OnClickListener() {
    76.                     public void onClick(DialogInterface dialog, int whichButton) {
    77.                             /* User clicked Cancel */
    78.                     }
    79.             })
    80.             .show();
    81.            }
    82.     };
    83.   
    84. }
    复制代码


    分ؓ三个部分Q?br />
    • |于onCreate()Ҏ中的E序用于判断当前旉是否需要检查更斎ͼ如果距离上次更新旉大于1天,启动检查更斎ͼ
    • 当以上条件满xQ启动checkUpdate来检查当前程序是否ؓ最新版本?/li>
    • 如果定版本已过期,那么登录marketQƈ直接指向当前E序面?/li>
    *******************************************************************************************
    向上aQ?br />      本h?span class="t_tag">论坛曄发过一关于此问题的求助帖,虽然大至的思\和上文差不多Q关键点是在于程序如何更斎ͼ现在看到它这里指出的更新Ҏ居然是登录market。不q以后发布的E序都是在market中,问题׃存在?
    1.                             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:your.app.id"));
    2.                             startActivity(intent);
    复制代码
    大家都是在eclipse?span class="t_tag">开?/span>吧,在每ơ更C码,q行模拟器时Q大家是否有注意到console的提CZ息:
    1. [2009-06-06 19:53:50 - Hello] Android Launch!
    2. [2009-06-06 19:53:50 - Hello] adb is running normally.
    3. [2009-06-06 19:53:50 - Hello] Performing linhai.com.hello.hello activity launch
    4. [2009-06-06 19:53:50 - Hello] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'avd'
    5. [2009-06-06 19:53:50 - Hello] WARNING: Application does not specify an API level requirement!
    6. [2009-06-06 19:53:50 - Hello] Device API version is 3 (Android 1.5)
    7. [2009-06-06 19:53:50 - Hello] Uploading Hello.apk onto device 'emulator-5554'
    8. [2009-06-06 19:53:50 - Hello] Installing Hello.apk...
    9. [2009-06-06 19:54:05 - Hello] Application already exists. Attempting to re-install instead...
    10. [2009-06-06 19:54:31 - Hello] Success!
    复制代码
    分析Q?br /> 1?span class="t_tag">android正常q行
    2。通过配置文gAndroidManifest.xml中运行我们的E序
    3?font color="Red">Uploading Hello.apk onto device 'emulator-5554'q句是关键,更新我们的程?br /> 4?font color="Red">Installing Hello.apk...
    5?font color="Red">Application already exists. Attempting to re-install instead...//E序已经存在Q尝试重新安?br />
    所以如果我们的E序?span class="t_tag">自动更新Q本人初步猜x和上面的步骤是一L?br /> 详看logcat中的log
    1. 06-06 11:54:02.567: DEBUG/PackageParser(582): Scanning package: /data/app/vmdl12464.tmp
    2. 06-06 11:54:08.048: INFO/PackageManager(582): Removing non-system package:linhai.com.hello
    3. 06-06 11:54:08.187: DEBUG/PackageManager(582): Removing package linhai.com.hello
    4. 06-06 11:54:08.286: DEBUG/PackageManager(582):   Activities: linhai.com.hello.hello
    5. 06-06 11:54:11.136: DEBUG/PackageManager(582): Scanning package linhai.com.hello
    6. 06-06 11:54:11.301: INFO/PackageManager(582): /data/app/vmdl12464.tmp changed; unpacking
    7. 06-06 11:54:11.626: DEBUG/installd(555): DexInv: --- BEGIN '/data/app/vmdl12464.tmp' ---
    8. 06-06 11:54:12.987: DEBUG/dalvikvm(7756): DexOpt: load 224ms, verify 265ms, opt 1ms
    9. 06-06 11:54:13.047: DEBUG/installd(555): DexInv: --- END '/data/app/vmdl12464.tmp' (success) ---
    10. 06-06 11:54:13.057: DEBUG/PackageManager(582):   Activities: linhai.com.hello.hello
    11. 06-06 11:54:15.608: INFO/installd(555): move /data/dalvik-cache/data@app@vmdl12464.tmp@classes.dex -> /data/dalvik-cache/data@app@linhai.com.hello.apk@classes.dex
    12. 06-06 11:54:15.737: DEBUG/PackageManager(582): New package installed in /data/app/linhai.com.hello.apk
    复制代码
    关于此类的自动更新的W三方管理Y件已l有了叫aTrackDog,其原理就是用上面的方式?br /> 关于得到版本P使用Q?
    1. int curVersion = getPackageManager().getPackageInfo("your.app.id", 0).versionCode;
    复制代码
    E序版本L是放在AndroidManifest.xml文g中:
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    2.         package="linhai.com.hello" android:versionCode="2" android:versionName="2.0.1">
    复制代码
    ȝ是关于:getPackageManager()在这个下面有很多ҎQ你可以通过它得Q得到当前终端安装的E序{。关于安装包的函数是QgetPackageManager().installPackage(packageURI)

    动手试验Q?br /> 在dos状态下q行Q?br /> 1.JPG
    查看logcat下的信息,大致和刚才相同,分析程Q?
    1. 06-06 12:18:58.827: INFO/jdwp(8368): received file descriptor 20 from ADB
    2. 06-06 12:19:02.546: DEBUG/PackageParser(582): Scanning package: /data/app/vmdl12465.tmp
    3. 06-06 12:19:07.738: INFO/PackageManager(582): /data/app/vmdl12465.tmp changed; unpacking
    4. 06-06 12:19:07.978: DEBUG/installd(555): DexInv: --- BEGIN '/data/app/vmdl12465.tmp' ---
    5. 06-06 12:19:09.617: DEBUG/dalvikvm(8378): DexOpt: load 254ms, verify 564ms, opt 3ms
    6. 06-06 12:19:09.697: DEBUG/installd(555): DexInv: --- END '/data/app/vmdl12465.tmp' (success) ---
    7. 06-06 12:19:11.907: INFO/installd(555): move /data/dalvik-cache/data@app@vmdl12465.tmp@classes.dex -> /data/dalvik-cache/data@app@com.example.android.snake.apk@classes.dex
    8. 06-06 12:19:11.956: DEBUG/PackageManager(582): New package installed in /data/app/com.example.android.snake.apk
    9. 06-06 12:19:14.746: DEBUG/dalvikvm(8368): VM cleaning up
    10. 06-06 12:19:14.857: DEBUG/dalvikvm(8368): LinearAlloc 0x0 used 628420 of 4194304 (14%)
    11. 06-06 12:19:15.897: DEBUG/dalvikvm(582): GC freed 17704 objects / 903984 bytes in 615ms
    12. 06-06 12:19:15.936: DEBUG/HomeLoaders(625): application intent received: android.intent.action.PACKAGE_ADDED, replacing=false
    13. 06-06 12:19:15.936: DEBUG/HomeLoaders(625):   --> package:com.example.android.snake
    14. 06-06 12:19:15.936: DEBUG/HomeLoaders(625):   --> add package
    复制代码
    1。接?span class="t_tag">数据Q保存到临时文g?data/app/vmdl12465.tmp
    2。解压此文gQ注意\?data/dalvik-cache/data@app@vmdl12465.tmp@classes.dex
    它是在data下的dalvik-cache?br /> 3.安装文g[q个步骤q包括查扄序是否已l安装等]
    4.使用GC清理内存

    查看DDMS中的l构
    2.JPG
    看到此文件结构,应该可以惌vlinux下的文g和它的权限管理,也就可以理解Qؓ什么我们的E序无法在data下创建文件之cȝ问题了?br /> 转蝲Q?a target="_blank">http://www.androidres.com/?p=349

    菜毛毛 2010-11-23 11:07 发表评论
    ]]>
    构徏自定义组?/title><link>http://www.aygfsteel.com/caizh2009/archive/2010/11/23/338757.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Tue, 23 Nov 2010 02:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/archive/2010/11/23/338757.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/338757.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/archive/2010/11/23/338757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/338757.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/338757.html</trackback:ping><description><![CDATA[<p>ndroid中,你的应用E序E序与Viewcȝ件有着一U固定的联系Q例?a ><span style="color: #439740;">按钮QButtonQ?/span></a>?<a ><span style="color: #439740;">文本框(TextViewQ?/span></a>, <a ><span style="color: #439740;">可编辑文本框QEditTextQ?/span></a>, <a ><span style="color: #439740;">列表框(ListViewQ?/span></a>, <a ><span style="color: #439740;">复选框QCheckBoxQ?/span></a>, <a ><span style="color: #439740;">单选框QRadioButtonQ?/span></a>, <a ><span style="color: #439740;">滚动条(GalleryQ?/span></a>, <a ><span style="color: #439740;">微调器(SpinnerQ?/span></a>, {等Q还有一些比较先q的有着Ҏ用途的ViewlgQ例?<a ><span style="color: #439740;">AutoCompleteTextView</span></a>, <a ><span style="color: #439740;">ImageSwitcher</span></a>?<a ><span style="color: #439740;">TextSwitcher</span></a>。除此之外,U类J多的像 <a ><span style="color: #439740;">U性布局QLinearLayoutQ?/span></a>, <a ><span style="color: #439740;">框架布局QFrameLayoutQ?/span></a>, q样的布局lgQLayoutQ也被认为是ViewlgQ他们是从ViewcL生过来的?/p> <p>你的应用E序是q些控制lg和布局lg以某U方式结合显C在屏幕上,一般来说这些组件对你来说基本够用,但是你也应该知道你是可以通过cȝ承创? 属于自己的组Ӟ一般可以承像View、LayoutsQ布局lgQ这LlgQ甚臛_以是一些比较高U的控制cȝ件。下面我们说一下ؓ什么要l承Q?/p> <ul> <li>你可以ؓ实现某种功能创徏一个完全自定义风格的组Ӟ例如用二l的囑Ş创徏控制lg实现声音的控Ӟ像电子控制一栗?</li> <li>你可以把几种lgl合形成一个新的组Ӟ你的lg可能同时包含ComboBoxQ一个能输入的文本列表)和dual-pane selector controlQ左右两个ListH口Q你可以分配H口每一的从属关系Q等{?</li> <li>你可以创q布局lgQLayoutQ。SDK中的布局lg已经提供了一pd的选项让你打造属于自q应用E序Q但是高U的开发h员会发现Ҏ现有的Layoutlg开发新的Layoutlg是很有必要的Q甚x完全从底层开发新的组件?</li> <li>你可以覆盖一个现有组件的昄或功能。例如,改变EditTextQ可~辑文本Q组件在屏幕上的昄方式Q可以参考Notepad的例子,里面教你如何创徏一个下划线的显C页面)?</li> <li>你可以捕获像按键按下q样的事Ӟ以一些通用的方法来处理q些事gQ一个游戏的例子Q?</li> </ul> <p>Z实现某种目标你可能很有必要扩展一个已l存在的ViewlgQ下面我们结合一些例子教你如何去做?</p> <h2 style="clear: right;">内容Q?/h2> <dl><dt><a ><span style="color: #439740;">基本ҎQThe Basic Approach Q?/span></a> </dt><dt><a ><span style="color: #439740;">完全自定义组ӞFully Customized Components Q?/span></a> </dt><dt><a ><span style="color: #439740;">定制lg的例子(Customized Component Example Q?/span></a> </dt><dt><a ><span style="color: #439740;">lg的؜合(或者控制类的؜合) QCompound Components (or Compound Controls) Q?/span></a> </dt><dt><a ><span style="color: #439740;">修改现有lgQTweaking an Existing Component Q?/span></a> </dt><dt><a ><span style="color: #439740;">结QGo Forth and Componentize Q?/span></a> </dt></dl> <p><a></a></p> <h2>基本ҎQThe Basic Approach Q?</h2> <p>下面的一些步骤都比较概括Q教你如何创qlgQ?/p> <ol> <li>让你的类QClassQ承一个现有的<a ><span style="color: #439740;">View</span></a> cL<a ><span style="color: #439740;">View</span></a>的子cR?</li> <li>重蝲父类的一些方法:需要重载的父类Ҏ一般以‘<code>on</code>’开_?a ><span style="color: #439740;">onDraw()</span></a>, <a ><span style="color: #439740;">onMeasure()</span></a>?<a ><span style="color: #439740;">onKeyDown()</span></a>{等? <ul> <li>q个?a ><span style="color: #439740;">Activity</span></a> 或则 <a ><span style="color: #439740;">ListActivity</span></a> z中同样适用Q你需要重载一些生命周期函数和一些其他功能性的HOOK函数?</li> </ul> </li> <li>使用你的l承c:一旦你的承类创徏完成Q你可以在基c能够用的地方使用你的l承c,但完成功能就是你自己~写的了?</li> </ol> <p>l承c能够定义在activities里面Q这样你能够方便的调用,但是qƈ不是必要的(或许在你的应用程序中你希望创Z个所有h都可以用的lgQ?</p> <p><a></a></p> <h2>完全自定义组ӞFully Customized ComponentsQ?/h2> <p>完全自定义组件的Ҏ可以创徏一些用于显C的囑ŞlgQgraphical componentsQ,也许是一个像电压表的囑Ş计量器,或者想卡拉OK里面昄歌词的小球随着音乐滚动。无论那U方式,你也不能单纯的利用组件的l合完成Q无Z怎么l合q些现有的组件?/p> <p>q运的是Q你可以以你自己的要求轻村֜创徏完全属于自己的组Ӟ你会发现不够用的只是你的惌力、屏q的寸和处理器的性能Q记住你的应用程序最后只会在那些性能低于桌面电脑的^C面运行)?/p> <p>下面单介l如何打造完全自定义的组Ӟ</p> <ol> <li>最为通用的VIEWcȝ父类毫无疑问?a ><span style="color: #439740;">View</span></a>c,因此Q最开始你要创Z个基于此cȝ一个子cR?</li> <li>你可以写一个构造函CXML文g中提取属性和参数Q当然你也可以自己定义这些属性和参数Q也许是囑Ş计量器的颜色和尺寸,或者是指针的宽度和q度{等Q?</li> <li>你可能有必要写自q事g监听器,属性的讉K和修改函数和一些组件本w的功能上的代码?</li> <li>如果你希望组件能够显CZ么东西,你很有可能会重蝲 <code>onMeasure()</code> 函数Q因而你׃得不重蝲 <code>onDraw()</code> 函数。当两个函数都用默认的,那么 <code>onDraw() </code>函数不会做M事情Qƈ且默认的 <code>onMeasure()</code> 函数自动的设|了一?00x100 —的寸Q这个尺寸可能ƈ不是你想要的?</li> <li>其他有必要重载的<code>on...</code> pd函数都需要重新写一ơ?</li> </ol> <h4><code>onDraw()</code>?code>onMeasure()</code></h4> <p><code>onDraw()</code>函数会传给你一?<a ><span style="color: #439740;">Canvas</span></a> 对象Q通过它你可以在二l图形上做Q何事情,包括其他的一些标准和通用的组件、文本的格式QQ何你可以惛_的东襉K可以通过它实现?/p> <p><em>注意:</em> q里不包括三l图形如果你想用三l的囑ŞQ你应该把你的父cȝView改ؓ<a ><span style="color: #439740;">SurfaceView</span></a>c,q且用一个单独的U程。可以参考GLSurfaceViewActivity 的例子?</p> <p><code>onMeasure()</code> 函数有点手Q因个函数是体现lg和容器交互的关键部分Q?em>onMeasureQ)</em>应该重蝲Q让它能够有效而准的表现它所包含部分的测量倹{这有点复杂了Q因为我们不但要考虑父类的限Ӟ通过<em>onMeasureQ)</em>传过来的Q,同时我们应该知道一旦测量宽度和高度出来后,p立即调用<em>setMeasuredDimension()</em> Ҏ?</p> <p>概括的来Ԍ执行<code>onMeasure()</code>函数分ؓ一下几个阶D: </p> <ol> <li>重蝲?code>onMeasureQ)</code>Ҏ会被调用Q高度和宽度参数同时也会涉及刎ͼ<code>widthMeasureSpec</code> ?code>heighMeasureSpec</code>两个参数都是整数cdQ,同时你应该考虑你品的寸限制。这里详l的内容可以参?a ><span style="color: #439740;">View.onMeasure(int, int)</span></a> Q这个连接内容详l的解释了整个measurement操作Q?</li> <li>你的lg要通过<code>onMeasureQ)</code>计算得到必要的measurement长度和宽度从而来昄你的lgQ它应该与规g持一_管它可以实C些规g外的功能Q在q个例子里,父类能够选择做什么,包括剪切、滑动、提交异常或者用不同的参数又一ơ调?code>onMeasureQ)</code>函数Q?</li> <li>一旦高度和宽度计算出来之后Q必调?code>setMeasuredDimension(int width, int height)</code>Q否则就会导致异常?</li> </ol> <p><a></a></p> <h3>一个自定义lg的例子(A Customized Component ExampleQ?/h3> <p>?<a ><span style="color: #439740;">API Demos</span></a> 中的CustomView提供了以一个自定义lg的例子,q个自定义组件在 <a ><span style="color: #439740;">LabelView</span></a> cM定义?/p> <p>LabelView例子涉及C自定义组件的Ҏ面面Q?/p> <ul> <li>首先让自定义lg从ViewcMz出来?</li> <li>~写带参数的构造函敎ͼ参数可以来源于XML文gQ。这里面的一些处理都已经在View父类中完成,但是ȝ有些Labelview使用的自定义lgҎ的新的参数需要处理?</li> <li>一些标准的Public函数Q例?code>setText()</code>, <code>setTextSize()</code>, <code>setTextColor()</code> </li> <li>重蝲<code>onMeasureQ)</code>Ҏ来确定组件的寸Q注意:在LabelView中是通过一个私有函?code>measureWidth()</code>来实现的Q?</li> <li>重蝲<code>onDraw()</code>函数把Lable昄在提供的canvas上?</li> </ul> <p>在例子中Q你可以通过<a ><span style="color: #439740;">custom_view_1.xml</span></a>看到自定义组件LabelView的用法。在XML文g中特别要注意的是<code>androidQ?/code>?code>app:</code>两个参数的؜合运用,<code>appQ?/code>参数表示应用E序中被认ؓ是LabelViewlg的个体,q些也会作ؓ资源在RcM定义?/p> <p><a></a></p> <h2>lg混合技术Compound Components (or Compound Controls) </h2> <p align="left">如果你不惛_Z个完全自定义的组Ӟ而是由几个现有组件的l合产生的新的组Ӟ那么混合lg技术就更加适合。简单的? _q样把几个现有的lg融合C个逻辑l合里面可以装成一个新的组件。例如,一个Combo Boxlg可以看作是是一个EditText和一个带有弹出列表的Buttonlg的؜合体。如果你点击按钮为列表选择一, </p> <p>在Android中,其实q有其他的两个Viewcd以做到类似的效果Q?<a ><span style="color: #439740;">Spinner</span></a>?a ><span style="color: #439740;">AutoCompleteTextView</span></a>,Q但是Combo Box作ؓ一个例子更Ҏ让h理解?</p> <p>下面单的介绍如何创徏l合lgQ?/p> <ol> <li>一般从Layoutcd始,创徏一个LayoutcȝzcR也许在Combo box我们会选择水^方向的LinearLayout作ؓ父类。记住,其他的LayoutcL可以嵌套到里面的Q因此؜合组件可以是Mlg的؜合。注 意,正如Activity一P你既可以使用外部XML文g来声明你的组Ӟ也可以嵌套在代码中?</li> <li>在新的؜合组件的构造函CQ首先,调用所有的父类的构造函敎ͼ传入对应的参数。然后可以设|你的؜合组件的其他的一些方面,在哪创徏 EditTextlgQ又在哪创徏PopupListlg。注意:你同时也可以在XML文g中引入一些自q属性和参数Q这些属性和参数也可以被你的混合 lg所使用?</li> <li>你也可以创徏旉监听器去监听新组件中Viewc触发的事gQ例如,对List选项单击事g的监听,你必d此时间发生后更新你EditText的倹{?</li> <li>你可能创q一些属性,带有讉K和修Ҏ法。例如,允许讄EditText初始值ƈ且提供访问它的方法?</li> <li>在Layout的派生类中,你没有必要去重蝲<code>onDrawQ)</code>?code>onMeasureQ)</code>ҎQ因为Layout会有比较好的默认处理。但是,如果你觉得有必要你也可以重蝲它?</li> <li>你也可能重蝲一?code>on</code>pd函数Q例如通过<code>onKeyDown()</code>的重载,你可以通过按某个键去选择列表中的对应的倹{?</li> </ol> <p>MQ把LayoutcM为基cL下面几个优点Q?/p> <ul> <li>正如activity一P你也可以通过XML文gd明你的新lgQ或者你也可以在代码中嵌套?</li> <li><code>onDrawQ)</code>函数?code>onMeasure()</code>函数是没有必要重载的Q两个函数已l做得很好了?</li> <li>你可以很快的创徏你的混合lgQƈ且可以像单一lg那样使用?</li> </ul> <h4>混合lg的例子(Examples of Compound ControlsQ?/h4> <p>In the API Demos project 在API Demos工程中,有两个Listcȝ例子——Example 4和Example 6Q里面的SpeechViewlg是从LinearLayoutcL生过来,实现昄演讲昄功能Q对应的原代码是<code>List4.java</code>?code>List6.java</code>?/p> <p><a></a></p> <h2>调整现有lgQTweaking an Existing ComponentQ?</h2> <p>在某些情况下Q你可能有更单的ҎdZ的组件。如果你应经有了一个非常类似的lgQ你所要做的只是简单的从这个组件派生出你的lgQ重在其? 一些有必要修改的方法。通过完全自定义组件的Ҏ你也可以同样的实玎ͼ但通过冲Viewz产生新的lgQ你可以单获取一些已l存在的处理机制Q这些很 可能是你所惌的,而没有必要从头开始?/p> <p>例如Q在SDK中有一个NotePad的例子(<a ><span style="color: #439740;">NotePad application</span></a> Q。该例子演示了很多Androidq_实用的细节,例如你会学到从EditViewz够自动换行的C本。这q不是一个完的例子Q因为相比早期的版本来说Q这些API已经感变了很多,但它实说明了一些问题?/p> <p>如果你还未查看该E序Q现在你可以在Eclipse中导入记事本例程Q或仅通过提供的链接查看相应的源代码)。特别是查看<a ><span style="color: #439740;">NoteEditor.java</span></a> 中的<code>MyEditText</code>的定义?/p> <p>下面有几点要注意的地方:</p> <ol> <li><strong>声明QThe DefinitionQ?/strong> <p>q个cL通过下面一行代码来定义的:</p> <code>public static class MyEditText extends EditText</code><br /> <br /> <ul> <li>它是定义?code>NoteEditor activity</code>c里面的Q但是它是共有的QpublicQ,因此如果有必要,它可以通过<code>NoteEditor.MyEditText</code>?code>NoteEditor</code>外面来调用?</li> <li>它是<code>static</code>c(静态类Q,意味着不会出现所谓的通过父类讉K数据?#8220;虚态方?#8221;Q?q样׃该类成ؓ一个可以不严重依赖<code>NoteEditor</code>的单独类。对于不需要从外部c访问的内联cȝ创徏Q这是一个很清晰地思\Q保证所产生的类很小Qƈ且允许它可以被其他的cL便的调用?</li> <li>它是<code>EditText</code>cȝ扩展Q它是我们选择的用来自定义的父cR当我们完成以后Q新的类可以作Z个普通的<code>EditText</code>来用?br /> </li> </ul> </li> <li><strong>cȝ初始?/strong> <p>一般来_父类是首先调用的。进一步来_q不是一个默认的构造函敎ͼ而是一个带参数的构造函数。因?code>EditText</code>是用从XML布局文g提取出来的参数进行创建,因此我们的构造函C要取出参数ƈ且将q些参数传递给父类?/p> </li> <li><strong>Ҏ重蝲</strong> <p>在本例中Q仅?code>onDraw()</code>一个方法进行重载。但你可以很ҎCؓ你的定制lg重蝲其他需要的Ҏ?/p> <p>对于C本例子来_通过重蝲<code>onDraw()</code>Ҏ我们可以?code>EidtView</code>的画布(<code>canvas</code>Q上l制蓝色的线条(<code>canvas</code>cL通过重写?code>onDraw()</code>Ҏ传递)。该函数快要l束时要调用<code>super.onDraw()</code>函数。父cȝҎ是应该调用,但是在这个例子里面,我们是在我们划好了蓝U之后调用的?/p> </li> <li><strong>使用定制lg</strong> <p>现在Q我们已l有自己定制的组件了Q但是应该怎样使用它呢Q在C本例子中Q定制的lg直接在预定义的布局文g中用,让我们看一?code>res/layout</code>目录中的<code>note_editor.xml文g?/code></p> <pre><view xmlns:android="http://schemas.android.com/apk/res/android" <br /> class="com.android.notepad.NoteEditor$MyEditText" <br /> id="@+id/note"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> android:background="@android:drawable/empty"<br /> android:padding="10dip"<br /> android:scrollbars="vertical"<br /> android:fadingEdge="vertical" /> </pre> <ul> <li>该自定义lg在XML中是作ؓ一个一般的ViewcL创徏的,q且是通过全\径包来描q的。注意这里内联类是通过<code>NoteEditor$MyEditText</code>来表C的Q这是Java~程中引用内联类的标准方法?</li> <li>在定义中的其他属性和参数传递给定制lg的构造函敎ͼ然后才传到EditText构造函CQ因此这些参C是你使用EditTextlg的参数。注意,q里你也可以增加你自q参数Q我们将在下面讨个问题?</li> </ul> </li> </ol> <p>q就是你全部需要做的,诚然q是一个简单的例子。但问题的关键是Q你的需求有多复杂,那么你的自定义组件就有多么复杂?/p> <p>一个更为复杂的lg可能需要重载更多的<code>on</code>pd函数Qƈ且还要很多特有的函数来充分实现自定义lg的功能。唯一的限制就是你的想象力和你需要组件去执行什么工作?/p> <p><a></a></p> <h2>现在开始你的组件化之旅?</h2> <p>如你所见,Android提供了一U精巧而又强大的组件模型,让你可能的完成你的工作。从单的lg调整到组件؜合,甚至完全自定义组Ӟ灉|的运用这些技术,你应该可以得C个完全符合你外观要求的的AndroidE序 </p> <img src ="http://www.aygfsteel.com/caizh2009/aggbug/338757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2010-11-23 10:19 <a href="http://www.aygfsteel.com/caizh2009/archive/2010/11/23/338757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是android marketQ国内三大类android market知多?http://www.aygfsteel.com/caizh2009/archive/2010/11/22/338717.html菜毛毛菜毛毛Mon, 22 Nov 2010 09:41:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/22/338717.htmlhttp://www.aygfsteel.com/caizh2009/comments/338717.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/22/338717.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338717.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338717.html

    APP虎大讲堂Q?/strong>
    android market是E序应用商店。在2008q??9日,h推出了Android MarketQؓ使用Android操作pȝ的手机用h供第三方应用?/p>

    q个q_怼于Apple?strong>App StoreQ可以连接最新的Google在线 服务器。由于其本土化的设计QAndroid Market可以让用户下载和安装支持Androidpȝ的第三方软g?/p>

    Google作ؓAndroid Market的东道主Q却一再强调Android Market的扮演的角色仅仅?#8220;软g销售和传播的中?/strong>”而不?#8220;软gqo?#8221;?/p>

    Z么Google选择 android market 而不是StoreQ?/h4>

    Google选择“’Market’”q个词而不?#8220;Store”Q是因ؓ其觉得开发者需要的是一个开攄、毫无阻的环境来创造内宏VGoogle希望 Android Market最l会像YouTube那样Q只需要注册一个发行h资格和Y件的cd可以发布Y件?br /> Googleq没有表CZ对android marketq行监管Q只是表CAndroid Market里的软g拥有反馈系l以及类似YouTube上的{pȝ。Google 通过q踪工具获得软g的反馈,如果某个软g有危险性,会有标识提醒用h意。但是其中的隐私问题却在前不久的SMobile 的分析报?gt;中显露无疑,而且普通用户很难注意到有些软g会R犯他们的隐私Q况且让handroid手机用户去L别生涩的专业名词Q实在太Zh所难了?/p>

    Android Market学习了App Store开创的软g销售模式,对iPhone以及App Store是一个冲击;更重要的一斚w?Google选择的Market模式与苹果的App Store之间的差异会逐渐昄出来?/p>

    国内三大candroid market知多?/h4>

    自从android在中国大大的火了一把之后,android market也如雨后春笋般的不断涌现出来。ȝ来说android market有如下几c:
    W一c: h创徏的android market
    handroid marketQ只此一Ӟ别无其他官方market?/p>

    W二c: 国内有头有脸的手机厂商和Udq营商创建的android market

    • MOTO的智件园:
      摩托|拉也是通过d转型生一pdandroid手机Q才着实大赚了一把,{了不利局面,倒是Nokiaq缓的反应速度让其市场份额半年几乎损失q? 半,虽然只在英国占有dCQ可以在国的市Z额远不及iphone和android手机QMOTO的Milestone更是让其重新站上历史的舞 台。不甘于?strong>handroid marke
      t 控制的摩托罗拉自然在d路,建造自qandroid market
    • 中移动的Mobile Market
    • 中移动的MM单来说是在android1.0/android1.5的基上改良版的androidpȝQ虽然当时可以跑动大部分android 软gQ但是这个market仍处于不愠不火的状态。不q不久前Q中国移动在原来版本的基上进行了许多创新和改q,推出的OPhone2,0Q还完全兼容 Android2.1Q甚至三?#8220;奥斯卡I7680”也搭载了OMSpȝ。目前MM已经初具规模Q中国移动Mobile Market拥有16400Ƒֺ用?/p>

    • 联通的UniStore
    • 联通应用商?UniStore)已经完成了O长的“内测阶段”Q将?月中旬正式发布,该应用商店在支付模式上将采用“中间账户”的模式,用户? 册联通应用商店时会自动注?#8220;中间账户”Q便可绑定话Ҏ付或者支付宝、胦付通等W三Ҏ付工兗据悉,联通应用商店将采用开攑^台的模式Q也是说不? 支持中国联通手机用户用,也支持中国移动和中国电信的手机用户用,目前仅有775ƾ?/p>

    • 中国电信的天DY件工?/strong>
    • 中国电信的天空间更是时d在升U状态,虽然使出n解数Q也仍然难见赯Q天空间拥?054?/p>

    • h的Android CoolmartZ支撑新机器的上市Q宇龙酷z也正在q行着Android Coolmart的招兵买马中?/li>

    W三c: 独立W三方创建的android market

    虽然可用的谷歌android市场来多Q但是同质化来严重的Market只能让用h所适从Q也无法产生cMApp Store一L用户黏性。怎么h育用L自家的market是最大的问题Q让我们期待中国的android市场是如何演l他们自q故事。当然APP 虎的软g在各cd场都可以通过搜烦APPhu下蝲?/p>

    菜毛毛 2010-11-22 17:41 发表评论
    ]]>PC上试玩Android Markethttp://www.aygfsteel.com/caizh2009/archive/2010/11/22/338713.html菜毛毛菜毛毛Mon, 22 Nov 2010 08:56:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/22/338713.htmlhttp://www.aygfsteel.com/caizh2009/comments/338713.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/22/338713.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338713.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338713.htmlhttp://www.iteeyan.com/2010/07/play-android-app-on-emulator/

    前几天,Jackerool大家介l了一个Android模拟器,可以让大家在PCZ玩Android 2.2。不q,该模拟器中少了一个精华的东西Q那是“Android MarketQ电子市场)”。目前,iPhone手机玩的是操控感、时,而Android手机玩的则是软gQ少?#8220;Android Market”的Android模拟器,无异于自废了一半的功力……

    其实Q要惛_Android 2.2模拟器中使用“Android MarketQ电子市场)”Q认真说来还是有炚w烦。网上虽然也有地方介l过Q但很多l节部分语焉不详。Jackeroo׃自己的实战操作,帮助大家温习一下?/p>

    Step 01 新徏Android 2.2虚拟?/strong>

    首先Q安装Android SDKQ新Z台Android 2.2虚拟机。不知道该去哪里下蝲Android SDK或者不清楚该如何用虚拟机的朋友,请先阅读“Google手机免费?#183;在PC上装Android 2.2”博文?/p>

    PlayAndroidAppOnEmulator 01 393x500 PC上试玩Android Market

    Step 02 命o行方式启动新拟机

    把SDK包下的System.img文gQF:\android-sdk-windows\platforms\android-8\imagesQ拷贝到?UserProfile%\.android\avd\Android-2.2下?/p>

    然后打开命o行窗口,切换到SDK包的Tools目录下,加参?#8220;-partition-size 96”启动虚拟机,才能?system有够的I间安装“Android MarketQ电子市场)”?/p>

    cd /d f:\android-sdk-windows\tools

    emulator.exe -avd Android-2.2 -partition-size 96

    PlayAndroidAppOnEmulator 02 500x326 PC上试玩Android Market

    Step 03 让Android启动Checkin服务

    要正怋?#8220;Android MarketQ电子市场)”Q必d动Checkin服务。等Android 2.2虚拟机启动完毕,看到正常的界面?/p>

    PlayAndroidAppOnEmulator 03 500x354 PC上试玩Android Market

    q时候,我们可以把配|文件build.prop取回来编辑(如果你有真实的Androidq在电脑上,一定要先取下来再进行以下操作)?/p>

    cd /d f:\android-sdk-windows\tools

    adb pull /system/build.prop .

    PlayAndroidAppOnEmulator 04 500x326 PC上试玩Android Market

    注意Q第一ơ执行adb指oQ会加蝲adb相关服务Q然后提C?#8220;device offlineQ设备不在线Q?#8221;。此Ӟ需要再ơ执行上面的adb指o可以了?/span>

    q样一来,build.prop放在了f:\android-sdk-windows\tools目录下,用文本编辑Y件比如EmEditor、UltraEdit之类的打开它。将“ro.config.nocheckin=yes”前面?#8220;#”h释掉?/p>

    #ro.config.nocheckin=yes

    然后再传到Android虚拟ZQ重新启动虚拟机QCheckin服务启动了Q在上传之前Q需要执?#8220;adb remount”指o?system目录可写Q?/p>

    adb remount
    adb push build.prop /system/build.prop

    PlayAndroidAppOnEmulator 05 500x326 PC上试玩Android Market

    Step 04 安装“Android  Market”到虚拟机

    首先Q下载一个ؓ各种手机开发的定制版Android 2.2Q比如Jackeroo曄用过的Android 2.2 for HTC。将它解压羃Q将system/app/GoogleServicesFramework.apk 和system/app/Vending.apk攑ֈf:\android-sdk-windows\tools下?/p>

    Android 2.2 for Legend Q?a target="_blank">q程下蝲

    然后执行以下指o安装q两个apk安装包,q且删除Android虚拟Z的SdkSetup.apkQ注意大写Q:

    adb push GoogleServicesFramework.apk /system/app
    adb push Vending.apk /system/app
    adb shell rm /system/app/SdkSetup.apk

    PlayAndroidAppOnEmulator 06 500x326 PC上试玩Android Market

    Step 05 清理现场

    关闭虚拟? 把生的 image: userdata-qemu.img, userdata.img, cache.img都删除,重新启动虚拟机它׃自动初始化?/p>

    Step 06 “Android Market”现n

    打开SDK Setup.exeQ按照常规方式启动刚才新创徏的Android 2.2虚拟机,可以看?#8220;Android Market”?/p>

    PlayAndroidAppOnEmulator 07 500x354 PC上试玩Android Market

    点击“Market”Q就需要进行Googled了,用你自己的Google账号d吧?/p>

    PlayAndroidAppOnEmulator 08 500x354 PC上试玩Android Market

    d以后Q理Z说就可以使用“Android MarketQ电子市场)”试各种软g了,但由于网l无法连接,暂时q搜索不到?/p>

    有连接上的朋友,请告诉我解决Ҏ?nbsp;



    菜毛毛 2010-11-22 16:56 发表评论
    ]]>
    通过AIDL及反机?使用隐藏API挂断电话(转蝲)http://www.aygfsteel.com/caizh2009/archive/2010/11/22/338708.html菜毛毛菜毛毛Mon, 22 Nov 2010 08:11:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/22/338708.htmlhttp://www.aygfsteel.com/caizh2009/comments/338708.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/22/338708.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338708.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338708.htmlhttp://dev.10086.cn/cmdn/bbs/thread-17136-1-1.html

    最q看论坛上有人问如何挂断电话,实际?.1版本?Google已经把该API隐藏?br /> 今天看资?发现可以通过AIDL(Androidq程Ҏ)及反?调用hide API,废话不多说了.附上q程

    一:在你的项目中新徏包com.android.internal.telephony,因ؓ要用AIDL,该包与ITelephony.aidl一?br />     在该包下新徏文gITelephony.aidl

    首先

    package com.android.internal.telephony;
    /* * Copyright (C) 2007 The Android Open Source Project
    * * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    * * [url=http://www.apache.org/licenses/LICENSE-2.0]http://www.apache.org/licenses/LICENSE-2.0[/url]
    * * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    /**
    * Interface used to interact with the phone. Mostly this is used by the
    * TelephonyManager class. A few places are still using this directly.
    * Please clean them up if possible and use TelephonyManager insteadl.
    * * {@hide}
    */
    interface ITelephony {
    /** * End call or go to the Home screen *
    * @return whether it hung up
    */
    boolean endCall();
    /** * Answer the currently-ringing call.
    * * If there's already a current active call, that call will be
    * automatically put on hold. If both lines are currently in use, the
    * current active call will be ended. *
    * TODO: provide a flag to let the caller specify what policy to use
    * if both lines are in use. (The current behavior is hardwired to
    * "answer incoming, end ongoing", which is how the CALL button
    * is specced to behave.) *
    * TODO: this should be a oneway call (especially since it's called
    * directly from the key queue thread). */
    void answerRingingCall();
    }   
     
    之后会在gen下面自动生成ITelephony.java
    ?通过反射生成ITelephony实例
    TelephonyManager telMgr = (TelephonyManager)getSystemService(
    TELEPHONY_SERVICE);
    //初始化iTelephony
    Class <TelephonyManager> c = TelephonyManager.class;
    Method getITelephonyMethod = null;
    try {
           getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[])null);
           getITelephonyMethod.setAccessible(true);
    } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
            iTelephony = (ITelephony) getITelephonyMethod.invoke(telMgr, (Object[])null);
    } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
          e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
          e.printStackTrace();
    } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
          e.printStackTrace();
    }
    q样可以调用iTelephony的endCall()Ҏ
    ?在AndroidManifest.xml中增加权?br />   <uses-permission android:name="android.permission.CALL_PHONE"/>


    菜毛毛 2010-11-22 16:11 发表评论
    ]]>
    Android 核心分析 之六 -----IPC框架分析 BinderQServiceQService manager http://www.aygfsteel.com/caizh2009/archive/2010/11/21/338630.html菜毛毛菜毛毛Sun, 21 Nov 2010 13:13:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/21/338630.htmlhttp://www.aygfsteel.com/caizh2009/comments/338630.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/21/338630.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338630.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338630.html阅读全文

    菜毛毛 2010-11-21 21:13 发表评论
    ]]>
    建立AIDL服务的步骤(3Q?/title><link>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338491.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Fri, 19 Nov 2010 09:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338491.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/338491.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/338491.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/338491.html</trackback:ping><description><![CDATA[     摘要: 建立AIDL服务的步骤(3Q?Q?Q编写一个MyServicec,代码如下Q? package net.blogjava.mobile.complex.type.aidl;     import java.util.HashMap;   import java.util.Map; &nb...  <a href='http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338491.html'>阅读全文</a><img src ="http://www.aygfsteel.com/caizh2009/aggbug/338491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2010-11-19 17:09 <a href="http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>8.4.2 建立AIDL服务的步骤(2Q?/title><link>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338490.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Fri, 19 Nov 2010 08:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338490.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/338490.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/338490.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/338490.html</trackback:ping><description><![CDATA[     摘要: 8.4.2  建立AIDL服务的步骤(2Q?在编写上面代码时应注意如下两点: 使用bindServiceҎ来绑定AIDL服务。其中需要用Intent对象指定AIDL服务的IDQ也是<action>标签中android:name属性的倹{?在绑定时需要一个ServiceConnection对象。创建ServiceConnection对象的过E中如果l定成功Q系l会?..  <a href='http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338490.html'>阅读全文</a><img src ="http://www.aygfsteel.com/caizh2009/aggbug/338490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2010-11-19 16:58 <a href="http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>建立AIDL服务的步骤(1Q?/title><link>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338489.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Fri, 19 Nov 2010 08:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338489.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/338489.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/338489.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/338489.html</trackback:ping><description><![CDATA[     摘要: http://book.51cto.com/art/201006/207070.htm 建立AIDL服务的步骤(1Q?建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下Q?Q?Q在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文g的语法类gJava代码Q但会稍有不同。详l介l见实例52的内宏V?Q?Q如果aidl文g的内Ҏ正确的,ADT...  <a href='http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338489.html'>阅读全文</a><img src ="http://www.aygfsteel.com/caizh2009/aggbug/338489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2010-11-19 16:56 <a href="http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>android aidl 实例http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338481.html菜毛毛菜毛毛Fri, 19 Nov 2010 07:41:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/19/338481.htmlhttp://www.aygfsteel.com/caizh2009/comments/338481.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/19/338481.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338481.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338481.html阅读全文

    菜毛毛 2010-11-19 15:41 发表评论
    ]]>
    俺拽汉化从未如此?APKTool使用教材http://www.aygfsteel.com/caizh2009/archive/2010/11/19/338448.html菜毛毛菜毛毛Fri, 19 Nov 2010 01:51:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/19/338448.htmlhttp://www.aygfsteel.com/caizh2009/comments/338448.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/19/338448.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338448.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338448.html

    在有APKTool之前QAndroid软g的汉化是一仉常痛苦的事情。例如汉化狂人的汉化工具Q那都是直接修改二进制文件的Q首? 是寻N要修改的字符串苦难(当然汉化狂h已经做得不错了)Q然后修改的字符串长度还要注意中文长度不能长q原来的文字……个中郁闷׃l说了?/p>

    APKTool可以说是一个革命性的工具Q有了APKTool之后Q可以说Q俺拽Y件的汉化工作C一个前所未有的简单程度?br /> 闲话不说Q我们用汉化实例来证明APKTool的方便简单,在动手之前,需要去 APKTool 的网站把工具下蝲下来。当然也可以下蝲我已l打包的 APKTool.zip(Windows下??/p>

    保你的电脑已经安装了JDK1.6QJRE1.6也可以)Q而且安装了一个优U的编辑YӞ推荐UltraEditQ,把APKTool解压到随便哪个你认ؓ操作h方便的目录。如果都好了Q我们动手吧Q?/p>

    W一步,把需要汉化的文gQ以汉化ColorNoteZQ放到APKTool所在目录,然后命o行进入APKTool目录Q执行下面的命oQ?/p>

    apktool  d  ColorNote.apk  ColorNote

    q句命o的意思是Q对ColorNote.apkq个E序q行反编译,获得的文件放在当前目录下的ColorNote目录中。正常反~译的话Q能看到下面的提C:

    I: Baksmaling…
    I: Decoding resource table…
    I: Decoding resources…
    I: Copying assets and libs…

    反编译完成,会在APKTool的目录下面,出现一个名叫ColorNote的目录,q去看看Q是q个样子的!

    用UltraEdit打开q个AndroidManifest.xml看看Q哈哈,是纯文本文g呀Q在打开res目录中的values中随便一个文 件看看?也是U文本文件啊Q也是_只要一个UltraEditQ我们就可以轻轻松松q行汉化了(把需要的字符串{换成中文可以了Q也不用考虑长度 了!Q至于要汉化哪些内容Q这个大家自qI吧Q不用我详细_也没有办法详l说的吧Q(事实上,除了XML的文本资源文件外Q老外写的很多E序Q字W串 都是hard coding在执行代码里面的QAPKTool反编译会得到smali伪代码,有些在XML资源里面找不到的字符Ԍȝ看smali的代码吧。)

    中间的翻译过E我们蟩q去Q例如我们已l翻译好了,在APKTool目录下执行下面的命o行:

    apktool b ColorNote

    q条命o是告诉APKToolQ把q个ColorNote目录里的东西~译打包成APKE序

    I: Checking whether sources has changed…

    I: Smaling…

    I: Checking whether resources has changed…

    I: Building resources…

    I: Building apk file…

    生成的APKE序在哪里呢Q在ColorNote\Dist目录里面Q名字是out.apk

    我们把这个out.apk文g{֐之后安装看看Q哈哈!完美中文汉化的俺拽程序来了!(当然Q这要看汉化者的功力了。)

    Popularity: 76%



    菜毛毛 2010-11-19 09:51 发表评论
    ]]>
    Android Activity和Intent机制学习W记http://www.aygfsteel.com/caizh2009/archive/2010/11/15/338089.html菜毛毛菜毛毛Mon, 15 Nov 2010 06:13:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/15/338089.htmlhttp://www.aygfsteel.com/caizh2009/comments/338089.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/15/338089.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338089.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338089.html阅读全文

    菜毛毛 2010-11-15 14:13 发表评论
    ]]>
    android 参考别人的UI设计http://www.aygfsteel.com/caizh2009/archive/2010/11/15/338081.html菜毛毛菜毛毛Mon, 15 Nov 2010 05:31:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/15/338081.htmlhttp://www.aygfsteel.com/caizh2009/comments/338081.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/15/338081.html#Feedback1http://www.aygfsteel.com/caizh2009/comments/commentRss/338081.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338081.html 在没有遇到这个工具前 我是通过破解别h的程序去查看他的设计的?
    那天无意中在 toolsq个文g夹下发现q个文g hierarchyviewer.batQGoogle一下发现帮你分析应用程序UI布局?
    现在我们开始用它吧:
    W一步,双击Q废话)Q出C个灰色的界面Q大家不要急,q是因ؓ它没有发现运行的androidE序?
    W二步:启动androidE序Q(或者连接android手机Q,你会发现?Hierarchy Viewer ?Devices里有 emulator-5554(q个是我的模拟器)Q然后选择 start servier
    如图


    选择 MainActivityQ点击Load view Hierarchy
    如图


    你还可以通过左下角的按钮交换到界面视?



    q就是你手机上看到的效果Q看到蓝色的l线没有Q你可以拖动他,双会显CZ的颜色的坐标
    你也可以把这些东西导出来Q怎么?好用?

    菜毛毛 2010-11-15 13:31 发表评论
    ]]>
    android ListView详解http://www.aygfsteel.com/caizh2009/archive/2010/11/14/338033.html菜毛毛菜毛毛Sun, 14 Nov 2010 08:28:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/14/338033.htmlhttp://www.aygfsteel.com/caizh2009/comments/338033.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/14/338033.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338033.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338033.html阅读全文

    菜毛毛 2010-11-14 16:28 发表评论
    ]]>
    从零开始学Androidhttp://www.aygfsteel.com/caizh2009/archive/2010/07/07/325426.html菜毛毛菜毛毛Wed, 07 Jul 2010 03:00:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/07/07/325426.htmlhttp://www.aygfsteel.com/caizh2009/comments/325426.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/07/07/325426.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/325426.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/325426.html从零开始?

    >1 下蝲Android SDK ,然后带着不求甚解的态度去阅?SDK 里的官方文档?
       没有手机软g开发经验、Java 以及 eclipse 使用l验的朋友不必担心,我也是一栗?
       刚开始接触不可能一下就看明白,先大体扫一下官Ҏ档,了解一下基本概念,不需要完全理解,
       有点印象p了?

    >2 ? http://www.eoeandroid.com/viewthread.php?tid=772&extra=page%3D1
       下蝲 eoe 特刊~ 写的很不错,你首先需要看完第一期,可以把开发环境搭建好了?
       其他几期可以E后再看?
     
    >3 查阅官方文档Q按照里边的 hello world 教程一步一步做Q很快你的第一?android 目可?
       成功q行了!

    >4 接下来你应该学习官方文档里的C本了Q这个要E微q旉Q做的过E可能有一些疑问,没关p,
       大胆忽略Q只要可以成功运行即可?

    >5 看了一大堆英文的东西,也有不少疑问了,应该看一些中文的文档来加q解了?
       强烈推荐  深入淺出 Android -- Google 手持a備應用E式a計入門      
       http://code.google.com/p/androidbmi/wiki/DiveIntoAndroid
       虽然是繁体的Q但是文章的质量相当高,看完之后基本上就可以是入门了!

    >6 接下来,?eoe 特刊的其它几期都看完Q相信你对一些常见的开发需求就很有把握了?

    >7 请加入hong老大建的,q里有很多对android 感兴?的兄弟,大家可以一h讨?
        http://groups.google.com/group/china-android-dev
     
    >8 推荐几个不错的博客,
       http://haric.javaeye.com/ 
       http://rayleung.javaeye.com/
          
    >9 可以l常? http://www.eoeandroid.com/forumdisplay.php?fid=27 q里逛逛?

    >10 惛_始做app赚钱了? 呵呵Q把 javaeye 里移动编E板块的_֍良好贴都M遍吧~ 福你!

    转自Q?/span>http://www.javaeye.com/topic/473980



    菜毛毛 2010-07-07 11:00 发表评论
    ]]>
    史上最全的android开发资料大集合http://www.aygfsteel.com/caizh2009/archive/2010/06/11/323342.html菜毛毛菜毛毛Fri, 11 Jun 2010 05:29:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/06/11/323342.htmlhttp://www.aygfsteel.com/caizh2009/comments/323342.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/06/11/323342.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/323342.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/323342.html 1、【eoeAndroid特刊】第一?Andriod 1.5 SDK? http://download.csdn.net/source/2399809

    2? 【eoeAndroid特刊】第二期 囑փ处理(1Q? http://download.csdn.net/source/2399814

    3? 【eoeAndroid特刊】第三期 Android Market及应用发? http://download.csdn.net/source/2399818

    4? 【eoeAndroid特刊】第五期 Android widget http://download.csdn.net/source/2399825

    5? 【eoeAndroid特刊】第六期 数据通信-成ؓAndroid数据大?http://download.csdn.net/source/2399830

    6? 【eoeAndroid特刊】第七期 NDK http://download.csdn.net/source/2400070

    7? 【eoeAndroid特刊】第八期 数据存储操作 http://download.csdn.net/source/2399834

    8? 【eoeAndroid特刊】第八期+ 开发技? http://download.csdn.net/source/2399841

    9? 【eoeAndroid特刊】第九期 http://download.csdn.net/source/2400075

    10? android开发教E? http://download.csdn.net/source/2400084

    11? android基础教程 http://download.csdn.net/source/2425923

    12? Google手机开发《Android.A.Programmers.Guide? http://download.csdn.net/source/2425883

    13? Professional.Android.Application.Development.2009 http://download.csdn.net/source/2425899

    14? Apress.Android.Essentials.Jul.2008 http://download.csdn.net/source/2425905

    15? android开发入门与实践 http://download.csdn.net/source/2425931

    16? android开发入门与实践源代? http://download.csdn.net/source/2425935

    17? Android应用框架原理和程序设? http://download.csdn.net/source/2399790

    18? android JNI 介与实现 http://download.csdn.net/source/2425864

    19? 19、Android开发指南中文版 d此链接:http://download.csdn.net/source/2426094
    20、android ADT-0.9.6 http://download.csdn.net/source/2399804

    21? android-sdk2.2 http://developer.android.com/sdk/android-2.2.html 


    另外附视频资源网址
    《Google Android开发入门与实战随书视频》WMV[压羃包] http://www.verycd.com/topics/2779532/
    上传最新资源:android中文帮助文档 http://download.csdn.net/source/2447570


    菜毛毛 2010-06-11 13:29 发表评论
    ]]>
    վ֩ģ壺 | ¸| ֱ| | | ۰| | | ߶| ȫ| | | Ӫ| | տ| | | | | | ̩| ɽ| | | ƽ| | ֹ| Ӱ| Ϫ| ˮ| ϳ| Դ| | ˮ| | ͭϿ| | Դ| ϻ| | ̨|