Download Android Programming Environment and general approach SDK

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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 navigation 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://schemas.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" />
</activity>
<activity android:name=".app.PeerActivity"
android:label="@string/peer_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.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.intent.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-example" />
<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 android:name="android.support.PARENT_ACTIVITY"
android:value=".app.AppNavHomeActivity" />
</activity>
<activity android:name=".app.InterstitialMessageActivity"
android:label="@string/interstitial_label"
android:theme="@style/Theme.Dialog"
android:launchMode="singleTask"
android:excludeFromRecents="true"
android:taskAffinity="">
<intent-filter>
<action android: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 permissions and
* limitations under the License.
*/
package com.example.android.appnavigation.app;
import
import
import
import
import
import
import
import
import
import
import
android.annotation.TargetApi;
android.app.ListActivity;
android.content.Intent;
android.content.pm.PackageManager;
android.content.pm.ResolveInfo;
android.os.Bundle;
android.view.View;
android.view.ViewGroup;
android.widget.BaseAdapter;
android.widget.ListView;
android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Home activity for app navigation code samples.
*/
public class AppNavHomeActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(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);
PackageManager 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;
}
}
}
SimpleUpActivity.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 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 CONDITIONS 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 permissions and
* limitations under the License.
*/
package com.example.android.appnavigation.app;
import com.example.android.appnavigation.R;
import
import
import
import
import
android.app.Activity;
android.content.Intent;
android.os.Bundle;
android.view.View;
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 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.
-->
<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>
Related documents