Android Programminx

kingfishblacksmithMobile - sans fil

14 déc. 2013 (il y a 3 années et 6 mois)

92 vue(s)

Android Programming

-

Environment and general approach

o

SDK download

o

Eclipse plug
-
in set up

o

Version selection

o

AVD

-

Project and “codebase”

o

Create an Android project



Proj, app, package name

o

Project “folders”



-

src: MainActivity.java


-

gen: R.java



-

Android
4.1/Dependencies

libs


-

assets: empty now


-

res: resources for UI




drawable




layout




menu




values


-

AndroidManifest.xml

Extends Activity;
You may change

Generated by the
tools; you may
not change

Jars/libraries for
the build


For libraries for
DB access, etc



-

Activities and Intents

o

An activity is a window that contains UI of your application



An application may contain zero to many activities



An activity may be opened, hidden, or killed: as demonstrated by the Activity
Lifecycle


-

Intent provides the naviga
tion mechanism between applications

o

It can help connect your activities in the same application, or

o

It can let your activity to call built
-
in applications such as Browser and Map.

Demo: App Navigation

AndroidManifest
.xml

<?xml

version="1.0" encoding="utf
-
8"?>

<!
--

Copyright (C) 2012 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



http://www.apache.org/licenses/LICENSE
-
2.0



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.

--
>


<manifest android:versionCode="1"


android:versionName="1"


xmlns:android="http://schema
s.android.com/apk/res/android"


package="com.example.android.appnavigation">



<application android:label="@string/app_name">


<activity android:name=".app.AppNavHomeActivity"


android:label="@string/app_nav_home_label">


<intent
-
filter>


<action android:name="android.intent.action.MAIN" />


<category android:name="android.intent.category.LAUNCHER" />


</intent
-
filter>


</activity>



<activity android:name="
.app.SimpleUpActivity"


android:label="@string/simple_up_label"


android:parentActivityName=".app.AppNavHomeActivity">


<intent
-
filter>


<action android:name="android.intent.action.MAIN" />



<category android:name="android.intent.category.SAMPLE_CODE" />


</intent
-
filter>


<meta
-
data android:name="android.support.PARENT_ACTIVITY"


android:value=".app.AppNavHomeActivity" />


</activit
y>



<activity android:name=".app.PeerActivity"


android:label="@string/peer_label"


android:parentActivityName=".app.AppNavHomeActivity">


<intent
-
filter>


<action android:name="android.in
tent.action.MAIN" />


<category android:name="android.intent.category.SAMPLE_CODE" />


</intent
-
filter>


<meta
-
data android:name="android.support.PARENT_ACTIVITY"


android:value=".
app.AppNavHomeActivity" />


</activity>



<activity android:name=".app.ViewFromOtherTaskActivity"


android:label="@string/view_from_other_task_label"


android:parentActivityName=".app.AppNavHomeActivity">



<intent
-
filter>


<action android:name="android.intent.action.MAIN" />


<category android:name="android.intent.category.SAMPLE_CODE" />


</intent
-
filter>


<meta
-
data android:name="android.support.
PARENT_ACTIVITY"


android:value=".app.AppNavHomeActivity" />


</activity>



<activity android:name=".app.OutsideTaskActivity"


android:label="@string/outside_task_label"


android:theme="
@style/Theme.Light"


android:taskAffinity="com.example.android.appnavigation.outsidetask">


<intent
-
filter>


<action android:name="android.intent.action.MAIN" />


<category android:name="android.int
ent.category.DEFAULT" />


</intent
-
filter>


</activity>



<activity android:name=".app.ContentViewActivity"


android:label="@string/content_view_label"


android:parentActivityName=".
app.ContentCategoryActivity">


<intent
-
filter>


<action android:name="android.intent.action.MAIN" />


<action android:name="android.intent.action.VIEW" />


<data android:mimeType="application/x
-
exampl
e" />


<category android:name="android.intent.category.DEFAULT" />


</intent
-
filter>


<meta
-
data android:name="android.support.PARENT_ACTIVITY"


android:value=".app.ContentCategoryActivity" />



</activity>



<activity android:name=".app.ContentCategoryActivity"


android:label="@string/content_category_label"


android:parentActivityName=".app.AppNavHomeActivity">


<intent
-
filter>



<action android:name="android.intent.action.MAIN" />


<category android:name="android.intent.category.SAMPLE_CODE" />


</intent
-
filter>


<meta
-
data android:name="android.support.PARENT_ACTIVITY"


android:value=".app.AppNavHomeActivity" />


</activity>



<activity android:name=".app.NotificationsActivity"


android:label="@string/notifications_label"


android:parentActivityName=".
app.AppNavHomeActivity">


<intent
-
filter>


<action android:name="android.intent.action.MAIN" />


<category android:name="android.intent.category.SAMPLE_CODE" />


</intent
-
filter>


<meta
-
data an
droid:name="android.support.PARENT_ACTIVITY"


android:value=".app.AppNavHomeActivity" />


</activity>



<activity android:name=".app.InterstitialMessageActivity"


android:label="@string/interstitial_labe
l"


android:theme="@style/Theme.Dialog"


android:launchMode="singleTask"


android:excludeFromRecents="true"


android:taskAffinity="">


<intent
-
filter>


<action an
droid:name="android.intent.action.MAIN" />


</intent
-
filter>


</activity>


</application>

</manifest>




AppNavHomeActivity
.java

/*


* Copyright (C) 2012 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


*


* http://www.apache.org/licenses/LICENSE
-
2.0


*


* 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 permis
sions and


* limitations under the License.


*/


package com.example.android.appnavigation.app;


import android.annotation.TargetApi;

import android.app.ListActivity;

import android.content.Intent;

import android.content.pm.PackageManager;

import
android.content.pm.ResolveInfo;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ListView;

import android.widget.TextView;


import java.util.ArrayList;

import java.u
til.List;


/**


* Home activity for app navigation code samples.


*/

public class AppNavHomeActivity extends ListActivity {


@Override


protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);



setListA
dapter(new SampleAdapter(querySampleActivities()));


}



@Override


protected void onListItemClick(ListView lv, View v, int pos, long id) {


SampleInfo info = (SampleInfo) getListAdapter().getItem(pos);


startActivity(info.intent);


}



@TargetApi(4)


protected List<SampleInfo> querySampleActivities() {


Intent intent = new Intent(Intent.ACTION_MAIN, null);


intent.setPackage(getPackageName());


intent.addCategory(Intent.CATEGORY_SAMPLE_CODE);



Pack
ageManager pm = getPackageManager();


List<ResolveInfo> infos = pm.queryIntentActivities(intent, 0);



ArrayList<SampleInfo> samples = new ArrayList<SampleInfo>();



final int count = infos.size();


for (int i = 0; i < count; i+
+) {


final ResolveInfo info = infos.get(i);


final CharSequence labelSeq = info.loadLabel(pm);


String label = labelSeq != null ? labelSeq.toString() :
info.activityInfo.name;



Intent target = new Intent();


target.setClassName(info.activityInfo.applicationInfo.packageName,


info.activityInfo.name);


SampleInfo sample = new SampleInfo(label, target);


samples.add(sample);


}



return samples;



}



static class SampleInfo {


String name;


Intent intent;



SampleInfo(String name, Intent intent) {


this.name = name;


this.intent = intent;


}


}



class SampleAdapter extends BaseAdapter {


private List<SampleInfo> mItems;



public SampleAdapter(List<SampleInfo> items) {


mItems = items;


}



//@Override


public int getCount() {


return mItems.size();


}



//@Override


public Object getItem(int position) {


return mItems.get(position);


}



//@Override


public long getItemId(int position) {


return position;


}



//@Override


public View getView(int
position, View convertView, ViewGroup parent) {


if (convertView == null) {


convertView =
getLayoutInflater().inflate(android.R.layout.simple_list_item_1,


parent, false);


convertView.setTag(convertView.findViewById(android.R.id.text1));


}


TextView tv = (TextView) convertView.getTag();


tv.setText(mItems.get(position).name);


return convertView;


}



}

}


SimpleUpActivi
ty
.java

/*


* Copyright (C) 2012 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


*


*

http://www.apache.org/licenses/LICENSE
-
2.0


*


* 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 im
plied.


* See the License for the specific language governing permissions and


* limitations under the License.


*/


package com.example.android.appnavigation.app;


import com.example.android.appnavigation.R;


import android.app.Activity;

import
android.os.Bundle;


public class
SimpleUpActivity

extends Activity {


@Override


protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.simple_up);


}

}




Simple_up.xml

<
?xml version="1.0" encoding="utf
-
8"?>

<!
--

Copyright (C) 2012 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



http://www.apache.org/licenses/LICENSE
-
2.0



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 CONDITI
ONS OF ANY KIND, either express or implied.


See the License for the specific language governing permissions and


limitations under the License.

--
>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"


android:layout_width
="match_parent"


android:layout_height="match_parent"


android:text="@string/simple_up_description"


android:padding="16dp" />


PeerActivity
.java

/*


* Copyright (C) 2012 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


*


* http://www.apache.org/licenses/LICENSE
-
2.0


*


* 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 permis
sions and


* limitations under the License.


*/


package com.example.android.appnavigation.app;


import com.example.android.appnavigation.R;


import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

im
port android.widget.TextView;


public class PeerActivity extends Activity {


private static final String EXTRA_PEER_COUNT =


"com.example.android.appnavigation.EXTRA_PEER_COUNT";



private int mPeerCount;



@Override


protected void
onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.peer);



mPeerCount = getIntent().getIntExtra(EXTRA_PEER_COUNT, 0) + 1;


TextView tv = (TextView) findViewById(R.id.peer_counter
);


tv.setText(getResources().getText(R.string.peer_count).toString() +
mPeerCount);


}



public void onLaunchPeer(View v) {


Intent target = new Intent(this, PeerActivity.class);


target.putExtra(EXTRA_PEER_COUNT, mPeerCount);



startActivity(target);


}

}




peer.xml

<?xml version="1.0" encoding="utf
-
8"?>

<!
--

Copyright (C) 2012 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



http://www.apache.org/licenses/LICENSE
-
2.0



Unless required by applicable law or agreed to in writing, software


distributed unde
r 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.

--
>


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


android:layout_width="match_parent"


android:layout_height="match_parent"


android:padding="16dp"


android:orientation="vertical">


<TextView

android:layout_width="match_parent"


android:layout_height="wrap_content"


android:text="@string/peer_description" />


<TextView android:id="@+id/peer_counter"


android:layout_width="match_parent"


android:layout_height="wrap_content"


android:layout_marginTop="8dp"


android:text="@string/peer_count" />


<Button android:layout_width="match_parent"


android:layout_height="wrap_content"


android:layout
_marginTop="8dp"


android:text="@string/launch_peer"


android:onClick="onLaunchPeer" />

</LinearLayout>