03_隐式意图打开activity
想让第一个activity把第二个activity打开的话,在清单文件里面声明一下并且





右键Debug As Android Application居然没有报错


mimeType 讲HTML的时候就讲过的对应的一个响应头。setContentType("text/html").这个实际上就是一个mime。
通过mime就可以说明当前这个activity可以处理的数据。我当前这个activity接收什么样类型的数据?所以mime就是用来说明我当前应用可以处理的媒体类型都有哪些?可以打开的具体内容是怎么样的?
当然这个东西咱们也可以自定义。自定义的格式是:类型/子类型.
<activity
android:name="com.itheima.callnewactivity.SecondActivity">
<intent-filter >
<action android:name="com.itheima.second"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="itheima"/>
</intent-filter>
<intent-filter >
<action android:name="com.itheima.second2"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="itheima"
android:mimeType="itcast/itheima"
/>
</intent-filter> </activity>
给SecondActivity搞了两个意图过滤器,实际上只需要匹配其中的一个。只要有一个完整的intent-filter被匹配上,我就可以把对应的activity给它打开。


Intent android.content.Intent.setType(String type) Set an explicit MIME data type. This is used to create intents that only specify a type and not data, for example to indicate the type of data to return. This method automatically clears any data that was previously set (for example by setData). Note: MIME type matching in the Android framework is case-sensitive, unlike formal RFC MIME types. As a result, you should always write your MIME types with lower case letters, or use normalizeMimeType or setTypeAndNormalize to ensure that it is converted to lower case.
Parameters:type The MIME type of the data being handled by this intent.Returns:Returns the same Intent object, for chaining multiple calls into a single statement.See Also:getTypesetTypeAndNormalizesetDataAndTypenormalizeMimeType


首先找FATAL EXCEPTION:main,从这儿开始的。


问题出在哪里?
Intent android.content.Intent.setType(String type) Set an explicit MIME data type. This is used to create intents that only specify a type and not data, for example to indicate the type of data to return. This method automatically clears any data that was previously set (for example by setData).
Note: MIME type matching in the Android framework is case-sensitive, unlike formal RFC MIME types. As a result, you should always write your MIME types with lower case letters, or use normalizeMimeType or setTypeAndNormalize to ensure that it is converted to lower case.
Parameters:type The MIME type of the data being handled by this intent.Returns:Returns the same Intent object, for chaining multiple calls into a single statement.See Also:getTypesetTypeAndNormalizesetDataAndTypenormalizeMimeType
This method automatically clears any data that was previously set (for example by setData).
调用setType()方法会自动清除任何的data数据(通过setData()来设置对应的内容).
所以setType()会自动清除setData()所设置的内容.
办法是先调setType()再调setData().
Intent android.content.Intent.setData(Uri data) Set the data this intent is operating on. This method automatically clears any type that was previously set by setType or setTypeAndNormalize. Note: scheme matching in the Android framework is case-sensitive, unlike the formal RFC. As a result, you should always write your Uri with a lower case scheme, or use Uri.normalizeScheme or setDataAndNormalize to ensure that the scheme is converted to lower case.
Parameters:data The Uri of the data this intent is now targeting.Returns:Returns the same Intent object, for chaining multiple calls into a single statement.See Also:getDatasetDataAndNormalizeandroid.net.Intent.normalize
setData()会清除setType()的数据.这是一个死结。setData()和setType()是互斥的.
所以可以用setDataAndType()把Data和Type一并设置。
程序运行成功了:
通过匹配第二个intent-filter可以把对应的activity给它打开。实际上咱们通过intent-filter方式打开一个activity这就叫一个隐式意图。隐式意图就是说我通过匹配某一个activity的意图过滤器,我把这个意图过滤器里面所有该匹配的内容都匹配上了,那我就可以把对应的activity打开。同样如果你的一个activity希望别人用隐式意图的方式打开,那你就必须设置一个intent-filter。这就是隐式意图。
你必须搞一个意图过滤器,有了意图过滤器别人才可以用隐式意图的方式打开。还有一点要注意:
<category android:name="android.intent.category.DEFAULT"/>
需要注意一点的是:category这个DEFAULT虽说不用匹配,但是这个东西必须得有。这个category DEFAULT虽说不需要通过代码的方式去匹配它,但是你想用隐式意图把这个打开,默认的这个category一定要在清单文件里面给它配置上。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.callnewactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.CALL_PHONE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.callnewactivity.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.itheima.callnewactivity.SecondActivity">
<intent-filter >
<action android:name="com.itheima.second"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="itheima"/>
</intent-filter>
<intent-filter >
<action android:name="com.itheima.second2"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="itheima"
android:mimeType="itcast/itheima"
/>
</intent-filter> </activity>
</application> </manifest>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="call"
android:text="打电话" />
<TextView
android:id="@+id/tv"
android:layout_below="@id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:textSize="20sp"
android:text="第一个activity"/>
<Button
android:layout_below="@id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="openSecond"
android:text="打开第二个activity"/>
<Button
android:layout_toRightOf="@id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="openSecond2"
android:text="打开第二个activity"/>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="call"
android:text="打电话" />
<TextView
android:layout_below="@id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ff00"
android:textSize="20sp"
android:text="第二个activity"
/>
</RelativeLayout>
package com.itheima.callnewactivity; import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void call(View v){
Intent intent = new Intent();
//给意图设置一个动作
intent.setAction(Intent.ACTION_CALL);
//给意图设置数据
intent.setData(Uri.parse("tel:"+110));
//打开打电话的activity
startActivity(intent); }
public void openSecond(View v){
Intent intent = new Intent();
intent.setAction("com.itheima.second");
intent.setData(Uri.parse("itheima:"+1223));
startActivity(intent);
}
public void openSecond2(View v){
Intent intent = new Intent();
intent.setAction("com.itheima.second2");
//intent.setData(Uri.parse("itheima:"+1233));
//intent.setType("itcast/itheima");//
//intent.setData(Uri.parse("itheima:"+1233));
intent.setDataAndType(Uri.parse("itheima:"+1223), "itcast/itheima");
startActivity(intent);
}
}
package com.itheima.callnewactivity; import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View; public class SecondActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
setContentView(R.layout.activity_second);
} public void call(View v){
Intent intent = new Intent();
//给意图设置一个动作
intent.setAction(Intent.ACTION_CALL);
//给意图设置数据
intent.setData(Uri.parse("tel:"+110));
//打开打电话的activity
startActivity(intent); } }
03_隐式意图打开activity的更多相关文章
- 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)
1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- android 21 隐式意图启动系统预定义activity
Intent intent=new Intent(LoginActivity.this, MainActivity.class);//显示意图启动,显示从一个activity到另一个activity, ...
- [android] 隐式意图激活另外一个activity
随着api的升级,系统的很多应用包名和类名都改掉了,所以很多时候,打开系统应用的时候会报错,隐式意图就是解决组件之间松耦合,描述动作行为 获取Intent对象,通过new出来 调用Intent对象的s ...
- 隐式意图启动一个Activity
隐式意图是通过指定一组动作或者属性实现,主要用于跨应用使用. 1.创建一个意图对象 Intent intent = new Intent(); 2.设置意图过滤器 intent.setAction(& ...
- android intent 隐式意图和显示意图(activity跳转)
android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity B ...
- Activity组件:(一)通过显式意图和隐式意图来实现Activity间的跳转
一.通过显式意图来实现Activity间的跳转 显式意图是指在创建Intent对象时就指定接受者组件 /** * 下面是通过显式意图进行跳转,即明确写出要跳转到SecondActivity.class ...
- Activity组件(二):通过显式意图和隐式意图来跳转至第三方应用
一.显式意图来跳转到第三方应用 /** * 这个方法会在点击按钮的时候执行 * @param view */ public void skip2Browser(View view){ Log.d(TA ...
- [android] 隐式意图和显式意图的使用场景
激活系统的某些应用,并且往应用里面填一些数据,比如说短信应用 打开短信应用,查看logcat,找到ActivityManager, 看到Display.com.android.mms/.ui.Comp ...
- 04_显示意图打开activity
实际上用显式意图打开一个activity就很简单了.只需要指定你要打开的这个activity的class就可以了. 需要注意一点的是创建了一个ThirdActivity必须要在清单文件里面声明.如果没 ...
随机推荐
- 【POJ3254】Corn Fields(状压DP)
题意: 一个M x N矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻.问有多少种放牛方案( ...
- poj - 3686 The Windy's (KM算法)
题意:n个订单和m个生产车间,每个订单在不同的车间生产所需要的时间不一样,并且每个订单只能在同一个车间中完成,直到这个车间完成这个订单就可以生产下一个订单.现在需要求完成n个订单的平均时间最少是多少. ...
- Codeforces 559A(计算几何)
A. Gerald's Hexagon time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- IP聚合 ---百度之星(与运算)
Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址.网 ...
- Wannafly模拟赛2 C alliances(dfs序+二分)
题目 https://www.nowcoder.com/acm/contest/4/C 题意 由n个点组成一个树,有m个帮派,每个帮派由一些个点组成,这些点以及它们两两路径上的所有点都属于该帮派的管辖 ...
- Java实验——输出一个数组里面连续子数组最大的和(二)文件操作
在本周的练习中,主要是对上周的实验进行健壮性的完善,即在所能考虑到的情况之中,尽量使自己的程序能够正常地运行. 在上周的实验中,我已经是在编程过程中考虑到用户输入的错误类型的问题,所以这一方面并没有多 ...
- 109.Convert sorted list to BST
/* * 109.Convert sorted list to BST * 2016.12.24 by Mingyang * 这里的问题是对于一个链表我们是不能常量时间访问它的中间元素的. * 这时候 ...
- 信号量学习 & 共享内存同步
刚刚这篇文章学习了共享内存:http://www.cnblogs.com/charlesblc/p/6142139.html 里面也提到了共享内存,自己不进行同步,需要其他手段比如信号量来进行.那么现 ...
- 初始VueJS视频
本视频简单的介绍的使用. 初始VueJS视频
- Office文档如何转换 PDF 转 DOC XLS
1 使用Adobe Acrobat Pro,打开任意PDF都可以转换为XLSX格式(似乎没找到XLS) 2 如果你转换之后的东西无法打开,则先转换成DOC,然后再把DOC全选复制粘贴到XLS即可 ...

