Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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>