概述
文章目录
- Intent启动不同组件的方法
- Activity
- Service
- BroadcastReceiver
- Data,Type属性与intent-filter配置
- 指定Action调用系统的Activity
- 启动Activity的标准Action常量以及对应的字符串
- 标准的Category常量以及对应的字符串
- 实例一查看并获取联系人电话
- MainActivity代码:
- 实例二:返回系统界面
- 实例三:Data属性配置。
- MainActivity代码:
- AndroidManifest.xml代码:
- 实例四:使用Action,Data属性启动系统Activity
- MainActivity代码:
- 总结:
后天就是2017了,提前祝大家新年快乐!最近忙得头晕头转向的,难得有天轻松日!正好能给我时间写篇博文,整理下知识!
首先,必须提出的是,概念性的东西在这里就不手打了,如什么是Intent,Intent如何使用!这里最好查看官方文档,说得比我说的详细的多,而且更加全面。
文章目录
- Intent启动不同组件的方法
- Activity
- Service
- BroadcastReceiver
- Data,Type属性与intent-filter配置
- 指定Action调用系统的Activity
- 启动Activity的标准Action常量以及对应的字符串
- 标准的Category常量以及对应的字符串
- 实例一查看并获取联系人电话
- MainActivity代码:
- 实例二:返回系统界面
- 实例三:Data属性配置。
- MainActivity代码:
- AndroidManifest.xml代码:
- 实例四:使用Action,Data属性启动系统Activity
- MainActivity代码:
- 总结:
实例一: 指定Action调用系统的Activity
实例三:Data属性配置
实例四:使用Action,Data属性启动系统Activity
Intent启动不同组件的方法
Activity
-
startActivity(Intent intent);
-
startActivityForResult(Intent intent,int requestCode);
Service
- componentName startService(Intent service);
- boolean bindService(Intent service,ServiceConnection conn, int flags);
BroadcastReceiver
- sendBroadcast(Intent intent);
- sendBroadcast(Intent intent,String receiverPermission)
- sendOrderedBroadcast(Intent intent,String receiverPermission,BroadcastReceiver resultReceiver,Handler scheduler,int initialCode,String initialData,Bundle unutialExtras);
- sendOrderedBroadcast(Intent intent,String receiverPermission)
- sendStickyBroadcast(Intent intent);
- sendStickyBroadcast(Intent intent,BroadcastReceiver resultReceiver,Handler scheduler,int initialCode,String initialData,Bundle unutialExtras)
Data,Type属性与intent-filter配置
- Data通常用于给Action提供操作的数据,接受一个Uri对象。
Data的通常格式:content://com.android.contacts/contacts/1
Uri总满足如下格式:scheme://host:post/path - Type属性用于指定该Data属性所指定的Uri对应的MIME类型,可以为任何类型,只要符合abc/xyz格式的字符串即可。
**注意:这两个属性会相互覆盖,如果希望Intent同时拥有的话,必须待用Intent的setDataAndType()方法. **
指定Action调用系统的Activity
启动Activity的标准Action常量以及对应的字符串
标准的Category常量以及对应的字符串
实例一查看并获取联系人电话
MainActivity代码:
public class MainActivity extends Activity
{
final int PICK_CONTACT = 0;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bn = (Button) findViewById(R.id.bn);
// 为bn按钮绑定事件监听器
bn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// 创建Intent
Intent intent = new Intent();
// 设置Intent的Action属性
intent.setAction(Intent.ACTION_GET_CONTENT);
// 设置Intent的Type属性
intent.setType("vnd.android.cursor.item/phone");
// 启动Activity,并希望获取该Activity的结果
startActivityForResult(intent, PICK_CONTACT);
}
});
}
@Override
public void onActivityResult(int requestCode
, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case (PICK_CONTACT):
if (resultCode == Activity.RESULT_OK)
{
// 获取返回的数据
Uri contactData = data.getData();
CursorLoader cursorLoader = new CursorLoader(this
, contactData, null, null, null, null);
// 查询联系人信息
Cursor cursor = cursorLoader.loadInBackground();
// 如果查询到指定的联系人
if (cursor.moveToFirst())
{
String contactId = cursor.getString(cursor
.getColumnIndex(
ContactsContract.Contacts._ID));
// 获取联系人的名字
String name = cursor.getString(cursor
.getColumnIndexOrThrow(
ContactsContract.Contacts.DISPLAY_NAME));
String phoneNumber = "此联系人暂未输入电话号码";
//根据联系人查询该联系人的详细信息
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.
Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone. CONTACT_ID
+ " = " + contactId, null, null);
if (phones.moveToFirst())
{
//取出电话号码
phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract
.CommonDataKinds.Phone.NUMBER));
}
// 关闭游标
phones.close();
EditText show =(EditText)findViewById(R.id.show);
show.setVisibility(View.VISIBLE);
//显示联系人的名称
show.setText(name);
EditText phone =(EditText)findViewById(R.id.phone);
phone.setVisibility(View.VISIBLE);
//显示联系人的电话号码
phone.setText(phoneNumber);
}
// 关闭游标
cursor.close();
}
break;
}
}
}
实例二:返回系统界面
// 创建Intent对象
Intent intent = new Intent();
// 为Intent设置Action、Category属性
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
实例三:Data属性配置。
注意观察:
- 如果目标组件<data…/>子元素只指定了android:scheme属性,那么只要Intent的Data属性的scheme部分与android:scheme属性相同,即可启动该组件!
- 如果目标组件<data…/>子元素只指定了android:scheme,android:host属性,那么只要Intent的Data属性的scheme,host部分与android:scheme,android:host属性相同,即可启动该组件!
- 如果目标组件<data…/>子元素只指定了android:scheme,android:host,android:port属性,那么只要Intent的Data属性的scheme,host,port部分与android:scheme,android:host,android:port属性相同,即可启动该组件!
MainActivity代码:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void scheme(View source)
{
Intent intent = new Intent();
// 只设置Intent的Data属性
intent.setData(Uri.parse("lee://www.aserbao.org:1234/test"));
startActivity(intent);
}
public void schemeHostPort(View source)
{
Intent intent = new Intent();
// 只设置Intent的Data属性
intent.setData(Uri.parse("lee://www.imerbao.org:8888/test"));
startActivity(intent);
}
public void schemeHostPath(View source)
{
Intent intent = new Intent();
// 只设置Intent的Data属性
intent.setData(Uri.parse("lee://www.imerbao.org:1234/mypath"));
startActivity(intent);
}
public void schemeHostPortPath(View source)
{
Intent intent = new Intent();
// 只设置Intent的Data属性
intent.setData(Uri.parse("lee://www.imerbao.org:8888/mypath"));
startActivity(intent);
}
public void schemeHostPortPathType(View source)
{
Intent intent = new Intent();
// 同时设置Intent的Data、Type属性
intent.setDataAndType(Uri.parse("lee://www.imerbao.org:8888/mypath")
, "abc/xyz");
startActivity(intent);
}
}
AndroidManifest.xml代码:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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:icon="@drawable/ic_scheme"
android:name=".SchemeActivity"
android:label="指定scheme的Activity">
<intent-filter>
<action android:name="xx" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 只要Intent的Data属性的scheme是lee,即可启动该Activity -->
<data android:scheme="lee" />
</intent-filter>
</activity>
<activity
android:icon="@drawable/ic_host"
android:name=".SchemeHostPortActivity"
android:label="指定scheme、host、port的Activity">
<intent-filter>
<action android:name="xx" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 只要Intent的Data属性的scheme是lee,且host是www.imerbao.org
port是8888即可启动该Activity -->
<data android:scheme="lee"
android:host="www.imerbao.org"
android:port="8888" />
</intent-filter>
</activity>
<activity
android:icon="@drawable/ic_sp"
android:name=".SchemeHostPathActivity"
android:label="指定scheme、host、path的Activity">
<intent-filter>
<action android:name="xx" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 只要Intent的Data属性的scheme是lee,且host是www.imerbao.org
path是/mypath,即可启动该Activity -->
<data android:scheme="lee"
android:host="www.imerbao.org"
android:path="/mypath" />
</intent-filter>
</activity>
<activity
android:icon="@drawable/ic_path"
android:name=".SchemeHostPortPathActivity"
android:label="指定scheme、host、port、path的Activity">
<intent-filter>
<action android:name="xx" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 需要Intent的Data属性的scheme是lee,且host是www.imerbao.org
port是8888,且path是/mypath,才可启动该Activity -->
<data android:scheme="lee"
android:host="www.imerbao.org"
android:port="8888"
android:path="/mypath"/>
</intent-filter>
</activity>
<activity
android:icon="@drawable/ic_type"
android:name=".SchemeHostPortPathTypeActivity"
android:label="指定scheme、host、port、path、type的Activity">
<intent-filter>
<action android:name="xx"/>
<category android:name="android.intent.category.DEFAULT" />
<!-- 需要Intent的Data属性的scheme是lee,且host是www.imerbao.org
port是8888,且path是/mypath
且type是abc/xyz,才可启动该Activity -->
<data android:scheme="lee"
android:host="www.imerbao.org"
android:port="8888"
android:path="/mypath"
android:mimeType="abc/xyz"/>
</intent-filter>
</activity>
</application>
实例四:使用Action,Data属性启动系统Activity
MainActivity代码:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bn = (Button) findViewById(R.id.bn);
// 为bn按钮添加一个监听器
bn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 创建Intent
Intent intent = new Intent();
String data = "http://blog.csdn.net/qq_32175491";
// 根据指定字符串解析出Uri对象
Uri uri = Uri.parse(data);
// 为Intent设置Action属性
intent.setAction(Intent.ACTION_VIEW);
// 设置Data属性
intent.setData(uri);
startActivity(intent);
}
});
Button edit = (Button) findViewById(R.id.edit);
// 为edit按钮添加一个监听器
edit.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 创建Intent
Intent intent = new Intent();
// 为Intent设置Action属性(动作为:编辑)
intent.setAction(Intent.ACTION_EDIT);
String data = "content://com.android.contacts/contacts/1";
// 根据指定字符串解析出Uri对象
Uri uri = Uri.parse(data);
// 设置Data属性
intent.setData(uri);
startActivity(intent);
}
});
Button call = (Button) findViewById(R.id.call);
// 为call按钮添加一个监听器
call.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 创建Intent
Intent intent = new Intent();
// 为Intent设置Action属性(动作为:拨号)
intent.setAction(Intent.ACTION_DIAL);
String data = "tel:12345678911";
// 根据指定字符串解析出Uri对象
Uri uri = Uri.parse(data);
// 设置Data属性
intent.setData(uri);
startActivity(intent);
}
});
}
总结:
本文主要介绍了Android系统中Intent的功能和用法,当Android应用需要启动某个组件是,总需要借助Intent来实现。不管启动Activity还是Service,BroadcastReceiver组件,Android系统都是通过Intent来实现的。这里讲得知识一些基础的使用方法,如果要深挖,建议研究下底层代码!还是那句话,官方文档很重要!
近段时间一直在研究如何写好博文,给今后的自己一些回顾以及希望能给正在学习Android路上的初学者一些帮助!如果有什么问题欢迎给我留言,看到及时回复!
今天都已经31号了,文章准备了两天!洗洗准备睡了,基础知识点差不多都有写到。明天起床再修改下,准备发布了!
最后
以上就是超级薯片为你收集整理的Android中Intent和IntentFilter进行通信Intent启动不同组件的方法Data,Type属性与intent-filter配置指定Action调用系统的Activity实例一查看并获取联系人电话实例二:返回系统界面实例三:Data属性配置。实例四:使用Action,Data属性启动系统Activity总结:的全部内容,希望文章能够帮你解决Android中Intent和IntentFilter进行通信Intent启动不同组件的方法Data,Type属性与intent-filter配置指定Action调用系统的Activity实例一查看并获取联系人电话实例二:返回系统界面实例三:Data属性配置。实例四:使用Action,Data属性启动系统Activity总结:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复