{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.some_view);
}
}//eof-class
<activity android:name=".BasicViewActivity"
android:label="Basic View Tests">
<intent-filter>
<action android:name="com.androidbook.intent.action.ShowBasicView"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
public static void invokeMyApplication(Activity parentActivity)
{
String actionName= "com.androidbook.intent.action.ShowBasicView";
Intent intent = new Intent(actionName);
parentActivity.startActivity(intent);
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);setContentView(R.layout.some_view);
Intent intent = this.getIntent();
if (intent == null)
{
Log.d("test tag", "This activity is invoked without an intent");
}
}
}//eof-class
Listing 5–1. Exercising Android’s Prefabricated Applications
public class IntentsUtils
{
public static void invokeWebBrowser(Activity activity)
{
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.google.com"));
activity.startActivity(intent);
}
public static void invokeWebSearch(Activity activity)
{
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);intent.setData(Uri.parse("http://www.google.com"));
activity.startActivity(intent);
}
public static void dial(Activity activity)
{
Intent intent = new Intent(Intent.ACTION_DIAL);activity.startActivity(intent);
}
public static void call(Activity activity)
{
Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:555–555–5555"));
activity.startActivity(intent);
}public static void showMapAtLatLong(Activity activity)
{
Intent intent = new Intent(Intent.ACTION_VIEW);//geo:lat,long?z=zoomlevel&q=question-string
intent.setData(Uri.parse("geo:0,0?z=4&q=business+near+city"));
activity.startActivity(intent);
}
public static void tryOneOfThese(Activity activity)
{
IntentsUtils.invokeWebBrowser(activity);
}
Listing 5–2. A Test Harness to Create a Simple Menu
public class MainActivity extends Activity
{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);TextView tv = new TextView(this);
tv.setText("Hello, Android. Say hello");
setContentView(tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);int base=Menu.FIRST; // value is 1
MenuItem item1 = menu.add(base,base,base,"Test");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == 1) {IntentUtils.tryOneOfThese(this);
}
else {return super.onOptionsItemSelected(item);
}
return true;
}
public static void dial(Activity activity)
{
Intent intent = new Intent(Intent.ACTION_DIAL);
activity.startActivity(intent);
{
Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:555–555–5555"));activity.startActivity(intent);
public static void invokeWebBrowser(Activity activity)
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));
activity.startActivity(intent);
<activity......>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http"/>
<data android:scheme="https"/>
</intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
putExtra(String name, int value);
putExtra(String name, double value);
putExtra(String name, String value);
putExtra(String name, int[] values);
putExtra(String name, float[] values);
//Serializable objects
putExtra(String name, Serializable value);
//Parcelable support
putExtra(String name, Parcelable value);
//Add another bundle at a given key
//Bundles in bundles
putExtra(String name, Bundle value);
//Add bundles from another intent
//copy of bundles
putExtra(String name, Intent anotherIntent);
//Explicit Array List support
putIntegerArrayListExtra(String name, ArrayList arrayList);
putParcelableArrayListExtra(String name, ArrayList arrayList);
putStringArrayListExtra(String name, ArrayList arrayList);
setClassName(String packageName, String classNameInThatPackage);
setClassName(Context context, String classNameInThatContext);
setClass(Context context, Class classObjectInThatContext);
Intent intent = new Intent();
intent.setComponent(new ComponentName(
"com.android.contacts"
,"com.android.contacts.DialContactsEntryActivity");
public class BasicViewActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.some_view);
}
Intent directIntent = new Intent(activity, BasicViewActivity.class);
<activity android:name=".BasicViewActivity"
<activity android:name=".HelloWorldActivity"
android:label="@string/app_name"><intent-filter>
<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
category名称 | 描述 |
CATEGORY_DEFAULT | 如果activity想被一个隐式的intent唤醒,那么可以声明为CATEGORY_DEFAULT。如果不定义该属性,那么activity需要显式的intent进行唤醒。因此,你可以看到那些被通用的action或其他action唤醒的activity使用缺省的category说明 |
CATEGORY_BROWSABLE | 用来想浏览器声明当其被唤醒时不会影响到浏览器的安全需求 |
CATEGORY_TAB | 该activity被嵌在一个父tabbed activity中 |
CATEGORY_ALTERNATIVE | activity使用CATEGORY_ALTERNATIVE用来浏览特定类型的数据。当你查阅文档是,这些部分通常作为一个可选菜单。例如打印界面相对于其他界面可以称之为alternative |
CATEGORY_SELECTED_ALTERNATIVE | activity使用CATEGORY_ALTERNATIVE用来浏览特定类型的数据。这与列出一系列的文本文件或html文件编辑器很类似。 |
CATEGORY_LAUNCHER | activity使用CATEGORY_LAUNCHER属性可以使其在launcher(桌面)中显示 |
CATEGORY_HOME | activity使用CATEGORY_HOME后可以作为主屏幕。特别的,应该只有一个activity具有该属性,如果有多个,系统会让你做出选择。 |
CATEGORY_PREFERENCE | activity使用CATEGORY_PREFERENCE属性表明其为preference activity。这样该activity将作为preference screen的一部分进行显示 |
CATEGORY_GADGET | activity使用CATEGORY_GADGET就可以嵌入到父activity中 |
CATEGORY_TEST | 表明这是一个测试activity |
CATEGORY_EMBED | 该属性已被CATEGORY_GADGET取代,保留只为后向兼容 |
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
PackageManager pm = getPackageManager();
for(ResolveInfo ri: list)
{
//ri.activityInfo.Log.d("test",ri.toString());String packagename = ri.activityInfo.packageName;String classname = ri.activityInfo.name;Log.d("test", packagename + ":" + classname);if (classname.equals("com.ai.androidbook.resources.TestActivity")){
Intent ni = new Intent();ni.setClassName(packagename,classname);
activity.startActivity(ni);
}
{
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);activity.startActivity(mainIntent);
//Go to home screen
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_HOME);
//Replace the home screen with yours
<intent-filter>
<action android:value="android.intent.action.MAIN" />
<category android:value="android.intent.category.HOME"/>
<category android:value="android.intent.category.DEFAULT" />
Listing 5–3. Returning Data After Invoking an Action
public class SomeActivity extends Activity
{
.....
.....
public static void invokePick(Activity activity)
{
Intent pickIntent = new Intent(Intent.ACTION_PICK);int requestCode = 1;
pickIntent.setData(Uri.parse(
"content://com.google.provider.NotePad/notes"));
activity.startActivityForResult(pickIntent, requestCode);
}
protected void onActivityResult(int requestCode
,int resultCode
,Intent outputIntent)
{
//This is to inform the parent class (Activity)//that the called activity has finished and the baseclass
//can do the necessary clean up
super.onActivityResult(requestCode, resultCode, outputIntent);
parseResult(this, requestCode, resultCode, outputIntent);
}
public static void parseResult(Activity activity, int requestCode, int resultCode, Intent outputIntent){
if (requestCode != 1){
Log.d("Test", "Some one else called this. not us");return;
}if (resultCode != Activity.RESULT_OK)
{
Log.d(Test, "Result code is not ok:" + resultCode);return;
}
Log.d("Test", "Result code is ok:" + resultCode);Uri selectedUri = outputIntent.getData();
Log.d("Test", "The output uri:" + selectedUri.toString());
//Proceed to display the note
outputIntent.setAction(Intent.ACTION_VIEW);
startActivity(outputIntent);
RESULT_CANCELED = 0;
RESULT_FIRST_USER = 1;
protected void onListItemClick(ListView l, View v, int position, long id) {
Uri uri = ContentUris.withAppendedId(getIntent().getData(), id);String action = getIntent().getAction();if (Intent.ACTION_PICK.equals(action) ||Intent.ACTION_GET_CONTENT.equals(action)){
// The caller is waiting for us to return a note selected by// the user. They have clicked on one, so return it now.
setResult(RESULT_OK, new Intent().setData(uri));
} else {
// Launch activity to view/edit the currently selected itemstartActivity(new Intent(Intent.ACTION_EDIT, uri));
}
public static void invokeGetContent(Activity activity)
{
Intent pickIntent = new Intent(Intent.ACTION_GET_CONTENT);
int requestCode = 2;
pickIntent.setType("vnd.android.cursor.item/vnd.google.note");
activity.startActivityForResult(pickIntent, requestCode);
{
Intent pickIntent = new Intent(Intent.ACTION_PICK);int requestCode = 1;pickIntent.setData(Uri.parse("content://com.google.provider.NotePad/notes"));activity.startActivityForResult(pickIntent, requestCode);
<activity android:name="NotesList" android:label="@string/title_notes_list">
......
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" /><category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
......
PendingIntent pi = PendingIntent.getActivity(context, 0, regularIntent,...);
startService(intent)
sendBroadcast(intent)
PendingIntent.getActivity(context, 0, intent, ...)
PendingIntent.getService(context, 0, intent, ...)
int requestCode, //1,2, 3, etcIntent intent, //original intentint flags ) //flags
介绍intents相关内容,包括常用的的actions, extras等内容介绍.
Google应用中intents集合。这里你可以看到如何唤醒Browser, Map, Dialer和 Google Street View.
介绍intent filters,当你需要注册filters时非常有用。
Intent filters的关键规则。
NotePad应用线上代码。
Pro Android 4 第五章 理解Intent的更多相关文章
-
Android开发艺术探索第五章——理解RemoteViews
Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...
-
Pro Android 4 第六章 构建用户界面以及使用控件(一)
目前为止,我们已经介绍了android的基础内容,但是还没开始接触用户界面(UI).本章我们将开始探讨用户界面和控件.我们先讨论一下android中UI设计的一般原理,然后我们在介绍一下an ...
-
Android笔记(五)利用Intent启动活动
Intent是意图的意思,分为显式 Intent 和隐式 Intent. 以下我们试图在FirstActivity中通过点击button来启动SecondActivity 1.显式Intent 在应用 ...
-
第五章:理解RemoteViews
RemoteView应该是一种远程View,表示的是一个View结构,他可以在其它进程中显示. 在android中使用场景有两种:通知栏和桌面小部件 5.1 RemoteView的应用 5.1.1 R ...
-
《Linux命令行与shell脚本编程大全》 第五章理解shell
5.1 1. cat /etc/passwd 可以查看每个用户自己的默认的shell程序. 2.默认的交互shell会在用户登录某个虚拟控制台终端时启动. 不过还有另外一个默认的shell是/bin/ ...
-
简单的学习心得:网易云课堂Android开发第五章SharedPreferences与文件管理
一.SharedPreferences (1)SharedPreferences能够用来保存一些属于基本数据类型的数据. (2)保存数据,删除数据都是由SharedPreferences的内部接口Ed ...
-
Android开发艺术探索》读书笔记 (5) 第5章 理解RemoteViews
第5章 理解RemoteViews 5.1 RemoteViews的应用 (1)RemoteViews表示的是一个view结构,它可以在其他进程中显示.由于它在其他进程中显示,为了能够更新它的界面,R ...
-
Android群英传笔记——第五章:Android Scroll分析
Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...
-
【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
随机推荐
-
windows server 注意windows的temp目录
windows解压缩包.安装软件时,会生成一些临时文件存放在temp目录中,windows不会自动删除这些文件. 临时文件目录可以在环境变量中查看和配置 在工作机or个人PC机中中这个目录一般不会有什 ...
-
英语语法最终珍藏版笔记-6“情态动词+have+ done”的含义
“情态动词+have+ done”的含义 1.Must have done的含义.“must have+过去分词”表示对过去的推测,意思是“一定已经,想必已经,准是已经….”,只用于肯定句中.例如: ...
-
LRU Cache的简单c++实现
什么是 LRU LRU Cache是一个Cache的置换算法,含义是“最近最少使用”,把满足“最近最少使用”的数据从Cache中剔除出去,并且保证Cache中第一个数据是最近刚刚访问的,因为这样的数据 ...
-
解决Windows和Linux使用npm打包js和css文件不同的问题
1.问题出现 最近公司上线前端H5页面,使用npm打包,特别奇怪的是每次打包发现css和js文件与Windows下打包不一致(网页使用Windows环境开发),导致前端页面功能不正常. 2.问题排查 ...
-
nginx系列13:最少连接算法以及如何跨worker进程生效
最少连接算法 使用最少连接算法可以使得nginx优先选择连接最少的上游服务器,需要用到upstream_least_conn模块. 如何跨worker进程生效 因为nginx是多进程结构的,默认多个w ...
-
Building gRPC Client iOS Swift Note Taking App
gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...
-
redis集群服务启动
1 启动redis服务器 redis-server.exe redis.windows.conf 需要配置config节点的bind ip 2 启动redis集群 开启redis.xx.conf 服务 ...
-
mfc怎么显示jpg png图像
如果是VS2005以上版本可以直接使用MFC自带的CImage类,如果不是可以用网上比较流行的CxImage,或者使用GDI+
-
Windows环境下ELK(5.X)平台的搭建
一.Windows环境下ELK平台的搭建(2.*) 1.安装配置Java环境 在Oracle官网获取最新版的Java版本,由于只是运行不是开发,所以也可以只下载JRE.官网:http://www.or ...
-
Visual Studio调试之断点技巧篇
原文链接地址:http://blog.csdn.net/Donjuan/article/details/4618717 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我 ...