SlideShare a Scribd company logo
1 of 19
Download to read offline
6   Android      in




              Android 2.x




                       2010/10/16
                            sak+
2010/10/16




                                                                    Android         in

  2010/10/16




                                                                 sak         sak+

                                                       Android Market

                 R    digg                        B Lite            W Free/Pro/Quad      W Free/

Pro/Quad                         CF        Free        2010/09/26



Twitter
         @_sak
E-mail 
         sakashita                  sakplus.jp

Blog    
        http://sakplus.jp/blog/




  6    Android       in                                    Android 2.x   
                         1
2010/10/16




Step 1.

          Android

Eclipse                  File > New > Android Project                       New Android Project

                                                 Finish




Project name                                         SampleDialer

Build Target                                         2.1-update1

Application name                                     SampleDialer

Package name                                         com.example.sampledialer

Create Activity                                      SampleDialer

Min SDK Version




Eclipse                  Run > Run As > Android Application




                    Hello World, SampleDialer!




 6   Android        in                                    Android 2.x   
                                 2
2010/10/16




src/com/example/sampledialer/SampleDialer.java

res/drawable-[hlm]dpi/icon.png

res/layout/main.xml

res/values/string.xml

AndroidManifest.xml




res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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"
    />
</LinearLayout>




src/com/example/sampledialer/SampleDialer.java

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




       Step 1




 6   Android    in                               Android 2.x   
                   3
2010/10/16

Step 2.




                                                                    URI



SimpleCursorAdapter




src/com/example/sampledialer/SampleDialer.java

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

               String filter = ContactsContract.Data.MIMETYPE + "='"
                  + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
                  + "'";

	         Cursor c =
            managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                         null, filter, null, null);
	
          SimpleCursorAdapter adapter =
	           new SimpleCursorAdapter(
	           	 this,
	           	    android.R.layout.simple_list_item_2,
	           	    c,
	                new String[] {
	           	       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
	           	       ContactsContract.CommonDataKinds.Phone.NUMBER,
	           	    },
	                new int[] {
	           	       android.R.id.text1,
	           	       android.R.id.text2,
	           	    }
	           	 );
	
          ListView lv = (ListView)findViewById(R.id.ListView01);
	         lv.setAdapter(adapter);
     }
}



 6   Android        in                           Android 2.x   
                       4
2010/10/16

ListView

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView
    android:id="@+id/ListView01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
</LinearLayout>




AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.sampledialer"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon"
                 android:label="@string/app_name">
        <activity android:name=".Sapporo01" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

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




 6   Android    in                         Android 2.x   
                         5
2010/10/16




Step 3.




                                  SimpleCursorAdapter

                                          SimpleCursorAdapter



SampleDialer                                      SampleDialer.java

                                                                      ic_contact_picture.png

       res/layout/drawable-mdpi




 6   Android     in                                Android 2.x   
                               6
2010/10/16

src/com/example/sampledialer/SampleDialer.java
private class MyAdapter extends SimpleCursorAdapter{
    public MyAdapter(Context context, int layout,
                                 Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
        setViewBinder(new MyViewBinder());
    }
}

private class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
	 @Override
	 public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 	
	 	 if (columnIndex == cursor.getColumnIndex(
                            ContactsContract.CommonDataKinds.Phone.PHOTO_ID)) {
	      	 String person_id = cursor.getString(columnIndex);
	      	 if (person_id == null) {
	      	 	 ((ImageView)view).setImageResource(R.drawable.ic_contact_picture);
	      	 	 return true;
	      	}

	                	   Uri uri = ContentUris.withAppendedId(
	                	   	 	 ContactsContract.Data.CONTENT_URI, Integer.parseInt(person_id));
	                	   String[] projection = { ContactsContract.CommonDataKinds.Photo.PHOTO };
	                	
	                	   Cursor c = getContentResolver().query(uri, projection, null, null, null);
	                	   byte[] photoData = null;
	                	   if (c.moveToFirst()) {
	                	   	 photoData = c.getBlob(0);
	                	   }
	       	    	       c.close();
	       	    	
	       	    	       if (photoData != null) {
	       	    	       	 ((ImageView)view).setImageBitmap(
	       	    	       	 	 	 BitmapFactory.decodeByteArray(photoData, 0, photoData.length));
	       	    	       }
	       	    	       return true;

	       	    } else if (columnIndex == cursor.getColumnIndex(
                                         ContactsContract.CommonDataKinds.Phone.TYPE)) {
	       	    	 String type;
	       	    	 int ntype = Integer.parseInt(cursor.getString(columnIndex));
	             	 if (ntype == 1) {
	             	 	 type = "    ";
	                	 } else if (ntype == 2) {
	                	 	 type = "    ";
	                	 } else if (ntype == 3) {
	                	 	 type = "    ";
	                	 } else {
	                	 	 type = "       ";
	              	}
	       	    	 ((TextView)view).setText(type);
	       	    	 return true;
	       	    }
	       	    return false;
	       }
}



    6       Android         in                              Android 2.x   
                            7
2010/10/16




                             simple_list_item_2

                                        ImageView

TextView                               item.xml




res/layout/item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ImageView
    android:id="@+id/photo"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:src="@drawable/ic_contact_picture"/>
<TextView
    android:text="Name"
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:text="Number"
    android:id="@+id/number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:text="Type"
    android:id="@+id/type"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
</LinearLayout>




 6   Android    in                         Android 2.x   
                         8
2010/10/16




src/com/example/sampledialer/SampleDialer.java
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

     String filter = ContactsContract.Data.MIMETYPE + "='"
                + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
                + "'";

     Cursor c =
        managedQuery(Contacts.Phones.CONTENT_URI, null, filter, null, null);

     MyAdapter adapter =
     	 new MyAdapter(
     	 	     this,
     	 	     R.layout.item,
     	 	     c,
             new String[] {
     	     	 	     ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
     	     	 	     ContactsContract.CommonDataKinds.Phone.NUMBER,
     	     	 	     ContactsContract.CommonDataKinds.Phone.PHOTO_ID,
     	     	 	     ContactsContract.CommonDataKinds.Phone.TYPE,
     	 	     },
             new int[] {
     	 	     	     R.id.name,
     	 	     	     R.id.number,
     	 	     	     R.id.photo,
     	 	     	     R.id.type,
     	 	     }
     	 );

     ListView lv = (ListView)findViewById(R.id.ListView01);
     lv.setAdapter(adapter);
}




 6   Android   in                                Android 2.x   
                  9
2010/10/16




Step 4.

                              RelativeLayout

           RelativeLayout




 6   Android     in         Android 2.x   
           10
2010/10/16

res/layout/item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="2dp"
    >
<ImageView
    android:id="@+id/photo"
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:src="@drawable/ic_contact_picture"/>
<TextView
    android:text="Name"
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/photo"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="10dp"
    android:maxWidth="190dp"
    android:singleLine="true"
    android:textSize="18dp"
    />
<TextView
    android:text="Number"
    android:id="@+id/number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/photo"
    android:layout_below="@id/name"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="15dp"
    android:textSize="14dp"
    />
<TextView
    android:text="Type"
    android:id="@+id/type"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/name"
    android:layout_marginTop="5dp"
    android:layout_marginRight="15dp"
    android:textSize="14dp"
    android:gravity="right"
    />
</RelativeLayout>




 6   Android    in                         Android 2.x   
                     11
2010/10/16




Step 5.




                              ACTION_DIAL

                    tel URI   tel:09012345678




 6   Android   in              Android 2.x   
          12
2010/10/16

src/com/example/sampledialer/SampleDialer.java
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);




     MyListView lv = (MyListView)findViewById(R.id.ListView01);
     lv.setDynamics(new SimpleDynamics(0.9f, 0.6f));
     lv.setAdapter(adapter);

     lv.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(
             AdapterView<?> parent, View v, int position, long id) {
         	   call(id);
         }
     });
}

private void call(long id) {
    Uri uri = ContentUris.withAppendedId(
                 ContactsContract.CommonDataKinds.Phone.CONTENT_URI, id);
	
    Cursor c = getContentResolver().query(uri, null, null, null, null);
    c.moveToFirst();
    String number =
        (String)c.getString(c.getColumnIndex(
                     ContactsContract. CommonDataKinds.Phone.NUMBER));
    c.close();

     Intent i = new Intent(Intent.ACTION_DIAL);
     i.setData(Uri.parse("tel:" + number));
     startActivity(i);
}




 6   Android   in                                Android 2.x   
               13
2010/10/16




ACTION_DIAL           ACTION_CALL



AndroidManifest.xml

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




 6   Android   in                           Android 2.x   
                     14
2010/10/16




Step 1.

                                URL

http://blogs.sonyericsson.com/developerworld/2010/06/23/android-tutorial-making-your-own-3d-list-
part-3/




[Download] 3D List sample project – Part 3 (37kb)


                     ListTutrialPart3.zip




src/com/sonyericsson/tutrial/list3/MyListView.java

src/com/sonyericsson/tutrial/list3/TestActivity.java    SimpleDynamics
src/com/sonyericsson/util/Dynamics.java

res/drawable-ldpi/background.9.png




src                                     src                                   TestActivity.java

                                      SimpleDynamics                       SimpleDialer

                                                       TestActivity.java




          res/drawable-ldpi/backgrund.9.png                    res/drawable-mdpi




 6    Android       in                                 Android 2.x   
                                   15
2010/10/16

Step 2.




res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <com.sonyericsson.tutorial.list3.MyListView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</LinearLayout>




res/layout/item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="2dp"
    android:background="@drawable/background"
    >




 6   Android    in                         Android 2.x   
                        16
2010/10/16

Step 3.

                          ListView




src/com/example/sampledialer/SampleDialer.java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);




     MyListView lv = (MyListView)findViewById(R.id.ListView01);
     lv.setDynamics(new SimpleDynamics(0.9f, 0.6f));
     lv.setAdapter(adapter);

     lv.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(
             AdapterView<?> parent, View v, int position, long id) {
         	   call(id);
         }
     });
}




 6   Android   in                                Android 2.x   
              17
2010/10/16




          Android

                     CF




6   Android     in        Android 2.x   
          18

More Related Content

What's hot

What's hot (16)

Android Testing
Android TestingAndroid Testing
Android Testing
 
Android App Dev Manual-1.doc
Android App Dev Manual-1.docAndroid App Dev Manual-1.doc
Android App Dev Manual-1.doc
 
Data binding в массы! (1.2)
Data binding в массы! (1.2)Data binding в массы! (1.2)
Data binding в массы! (1.2)
 
Reactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel ArchitectureReactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel Architecture
 
I os 11
I os 11I os 11
I os 11
 
Anton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightAnton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 light
 
droidparts
droidpartsdroidparts
droidparts
 
Android 3
Android 3Android 3
Android 3
 
I os 03
I os 03I os 03
I os 03
 
droidQuery: The Android port of jQuery
droidQuery: The Android port of jQuerydroidQuery: The Android port of jQuery
droidQuery: The Android port of jQuery
 
Architectures in the compose world
Architectures in the compose worldArchitectures in the compose world
Architectures in the compose world
 
package org dev
package org devpackage org dev
package org dev
 
Larena3 0架构与关键技术
Larena3 0架构与关键技术Larena3 0架构与关键技术
Larena3 0架构与关键技术
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation Drawer
 
Managing parallelism using coroutines
Managing parallelism using coroutinesManaging parallelism using coroutines
Managing parallelism using coroutines
 
Android dev toolbox
Android dev toolboxAndroid dev toolbox
Android dev toolbox
 

Similar to ハンズオン資料 電話を作ろう(v2.x用)

Android activity, service, and broadcast recievers
Android activity, service, and broadcast recieversAndroid activity, service, and broadcast recievers
Android activity, service, and broadcast recievers
Utkarsh Mankad
 
ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013
Mathias Seguy
 

Similar to ハンズオン資料 電話を作ろう(v2.x用) (20)

Unit5 Mobile Application Development.doc
Unit5 Mobile Application Development.docUnit5 Mobile Application Development.doc
Unit5 Mobile Application Development.doc
 
android level 3
android level 3android level 3
android level 3
 
Android应用开发简介
Android应用开发简介Android应用开发简介
Android应用开发简介
 
MAD-Lec8 Spinner Adapater and Intents (1).ppt
MAD-Lec8 Spinner Adapater and Intents (1).pptMAD-Lec8 Spinner Adapater and Intents (1).ppt
MAD-Lec8 Spinner Adapater and Intents (1).ppt
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
 
Android overview
Android overviewAndroid overview
Android overview
 
Android
AndroidAndroid
Android
 
Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)
 
Hacking the Codename One Source Code - Part IV - Transcript.pdf
Hacking the Codename One Source Code - Part IV - Transcript.pdfHacking the Codename One Source Code - Part IV - Transcript.pdf
Hacking the Codename One Source Code - Part IV - Transcript.pdf
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applications
 
Dependency Injection for Android
Dependency Injection for AndroidDependency Injection for Android
Dependency Injection for Android
 
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
 
Compose In Practice
Compose In PracticeCompose In Practice
Compose In Practice
 
Android activity, service, and broadcast recievers
Android activity, service, and broadcast recieversAndroid activity, service, and broadcast recievers
Android activity, service, and broadcast recievers
 
Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!
 
ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013
 
Beginning Native Android Apps
Beginning Native Android AppsBeginning Native Android Apps
Beginning Native Android Apps
 
Introduction To Google Android (Ft Rohan Bomle)
Introduction To Google Android (Ft Rohan Bomle)Introduction To Google Android (Ft Rohan Bomle)
Introduction To Google Android (Ft Rohan Bomle)
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

ハンズオン資料 電話を作ろう(v2.x用)

  • 1. 6 Android in Android 2.x 2010/10/16 sak+
  • 2. 2010/10/16 Android in 2010/10/16 sak sak+ Android Market R digg B Lite W Free/Pro/Quad W Free/ Pro/Quad CF Free 2010/09/26 Twitter @_sak E-mail sakashita sakplus.jp Blog http://sakplus.jp/blog/ 6 Android in Android 2.x 1
  • 3. 2010/10/16 Step 1. Android Eclipse File > New > Android Project New Android Project Finish Project name SampleDialer Build Target 2.1-update1 Application name SampleDialer Package name com.example.sampledialer Create Activity SampleDialer Min SDK Version Eclipse Run > Run As > Android Application Hello World, SampleDialer! 6 Android in Android 2.x 2
  • 4. 2010/10/16 src/com/example/sampledialer/SampleDialer.java res/drawable-[hlm]dpi/icon.png res/layout/main.xml res/values/string.xml AndroidManifest.xml res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 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" /> </LinearLayout> src/com/example/sampledialer/SampleDialer.java public class SampleDialer extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } Step 1 6 Android in Android 2.x 3
  • 5. 2010/10/16 Step 2. URI SimpleCursorAdapter src/com/example/sampledialer/SampleDialer.java public class Sapporo01 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String filter = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'"; Cursor c = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, filter, null, null); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, android.R.layout.simple_list_item_2, c, new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, }, new int[] { android.R.id.text1, android.R.id.text2, } ); ListView lv = (ListView)findViewById(R.id.ListView01); lv.setAdapter(adapter); } } 6 Android in Android 2.x 4
  • 6. 2010/10/16 ListView res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/ListView01" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout> AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sampledialer" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Sapporo01" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.READ_CONTACTS" /> </manifest> 6 Android in Android 2.x 5
  • 7. 2010/10/16 Step 3. SimpleCursorAdapter SimpleCursorAdapter SampleDialer SampleDialer.java ic_contact_picture.png res/layout/drawable-mdpi 6 Android in Android 2.x 6
  • 8. 2010/10/16 src/com/example/sampledialer/SampleDialer.java private class MyAdapter extends SimpleCursorAdapter{ public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { super(context, layout, c, from, to); setViewBinder(new MyViewBinder()); } } private class MyViewBinder implements SimpleCursorAdapter.ViewBinder { @Override public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (columnIndex == cursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.PHOTO_ID)) { String person_id = cursor.getString(columnIndex); if (person_id == null) { ((ImageView)view).setImageResource(R.drawable.ic_contact_picture); return true; } Uri uri = ContentUris.withAppendedId( ContactsContract.Data.CONTENT_URI, Integer.parseInt(person_id)); String[] projection = { ContactsContract.CommonDataKinds.Photo.PHOTO }; Cursor c = getContentResolver().query(uri, projection, null, null, null); byte[] photoData = null; if (c.moveToFirst()) { photoData = c.getBlob(0); } c.close(); if (photoData != null) { ((ImageView)view).setImageBitmap( BitmapFactory.decodeByteArray(photoData, 0, photoData.length)); } return true; } else if (columnIndex == cursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.TYPE)) { String type; int ntype = Integer.parseInt(cursor.getString(columnIndex)); if (ntype == 1) { type = " "; } else if (ntype == 2) { type = " "; } else if (ntype == 3) { type = " "; } else { type = " "; } ((TextView)view).setText(type); return true; } return false; } } 6 Android in Android 2.x 7
  • 9. 2010/10/16 simple_list_item_2 ImageView TextView item.xml res/layout/item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/photo" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/ic_contact_picture"/> <TextView android:text="Name" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:text="Number" android:id="@+id/number" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:text="Type" android:id="@+id/type" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 6 Android in Android 2.x 8
  • 10. 2010/10/16 src/com/example/sampledialer/SampleDialer.java @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String filter = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'"; Cursor c = managedQuery(Contacts.Phones.CONTENT_URI, null, filter, null, null); MyAdapter adapter = new MyAdapter( this, R.layout.item, c, new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.PHOTO_ID, ContactsContract.CommonDataKinds.Phone.TYPE, }, new int[] { R.id.name, R.id.number, R.id.photo, R.id.type, } ); ListView lv = (ListView)findViewById(R.id.ListView01); lv.setAdapter(adapter); } 6 Android in Android 2.x 9
  • 11. 2010/10/16 Step 4. RelativeLayout RelativeLayout 6 Android in Android 2.x 10
  • 12. 2010/10/16 res/layout/item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="2dp" > <ImageView android:id="@+id/photo" android:layout_width="56dp" android:layout_height="56dp" android:src="@drawable/ic_contact_picture"/> <TextView android:text="Name" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/photo" android:layout_marginTop="5dp" android:layout_marginLeft="10dp" android:maxWidth="190dp" android:singleLine="true" android:textSize="18dp" /> <TextView android:text="Number" android:id="@+id/number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/photo" android:layout_below="@id/name" android:layout_marginTop="5dp" android:layout_marginLeft="15dp" android:textSize="14dp" /> <TextView android:text="Type" android:id="@+id/type" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toRightOf="@id/name" android:layout_marginTop="5dp" android:layout_marginRight="15dp" android:textSize="14dp" android:gravity="right" /> </RelativeLayout> 6 Android in Android 2.x 11
  • 13. 2010/10/16 Step 5. ACTION_DIAL tel URI tel:09012345678 6 Android in Android 2.x 12
  • 14. 2010/10/16 src/com/example/sampledialer/SampleDialer.java @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyListView lv = (MyListView)findViewById(R.id.ListView01); lv.setDynamics(new SimpleDynamics(0.9f, 0.6f)); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick( AdapterView<?> parent, View v, int position, long id) { call(id); } }); } private void call(long id) { Uri uri = ContentUris.withAppendedId( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, id); Cursor c = getContentResolver().query(uri, null, null, null, null); c.moveToFirst(); String number = (String)c.getString(c.getColumnIndex( ContactsContract. CommonDataKinds.Phone.NUMBER)); c.close(); Intent i = new Intent(Intent.ACTION_DIAL); i.setData(Uri.parse("tel:" + number)); startActivity(i); } 6 Android in Android 2.x 13
  • 15. 2010/10/16 ACTION_DIAL ACTION_CALL AndroidManifest.xml <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> 6 Android in Android 2.x 14
  • 16. 2010/10/16 Step 1. URL http://blogs.sonyericsson.com/developerworld/2010/06/23/android-tutorial-making-your-own-3d-list- part-3/ [Download] 3D List sample project – Part 3 (37kb) ListTutrialPart3.zip src/com/sonyericsson/tutrial/list3/MyListView.java src/com/sonyericsson/tutrial/list3/TestActivity.java SimpleDynamics src/com/sonyericsson/util/Dynamics.java res/drawable-ldpi/background.9.png src src TestActivity.java SimpleDynamics SimpleDialer TestActivity.java res/drawable-ldpi/backgrund.9.png res/drawable-mdpi 6 Android in Android 2.x 15
  • 17. 2010/10/16 Step 2. res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.sonyericsson.tutorial.list3.MyListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ListView01" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> res/layout/item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="2dp" android:background="@drawable/background" > 6 Android in Android 2.x 16
  • 18. 2010/10/16 Step 3. ListView src/com/example/sampledialer/SampleDialer.java @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyListView lv = (MyListView)findViewById(R.id.ListView01); lv.setDynamics(new SimpleDynamics(0.9f, 0.6f)); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick( AdapterView<?> parent, View v, int position, long id) { call(id); } }); } 6 Android in Android 2.x 17
  • 19. 2010/10/16 Android CF 6 Android in Android 2.x 18