Android开发—Activiy之间的跳转
Intent介绍
Intent被称为意图,是程序中各组件进行交互的一种方式,它可以指定当前组件要执行的动作,也可以在不同组件之间进行数据传递。
一般用于启动Activity、Service以及发送广播等。根据开启目标组件的方式不同,Intent被分为两种:显示意图和隐式意图。
显式意图可以直接通过名称开启指定的目标组件。
隐式意图通过指定action和category等属性,系统进行分析后寻找目标Activity。
显式示例:
//创建一个Intent对象,其中第一个参数为Context表示当前的Activity对象,第二个参数表示要启动的目标Activity。
Intent intent = new Intent(this, Activity02.class);
startActivity(intent); //使用startActivity()方法启动目标组件。
隐式示例:
Intent intent = new Intent();
//设置action动作,当与清单文件中的action相匹配时启动目标组件。
intent.setAction("android.intent.action.VIEW");
startActivity(intent);
<activity android:name=".MainActivity">
<intent-filter>
//设置action动作,当与代码中的action与该action相匹配时启动该组件。
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
实战练习:
做一个页面,里面有几个按钮,可以实现打开网页、打电话、发短信等
一、在【activity_main.xml】页面添加按钮:
<TableRow>
<Button android:onClick="click_Web" style="@style/MyStyle" android:text="1调web浏览器 "/>
<Button android:onClick="click_Geo" style="@style/MyStyle" android:text="2调地图"/>
</TableRow>
<TableRow>
<Button android:onClick="click_DiaL" style="@style/MyStyle" android:text="3调拨打电话界面" />
<Button android:onClick="click_Call" style="@style/MyStyle" android:text="4直接拨打电话" />
</TableRow>
<TableRow>
<Button android:onClick="click_Delete" style="@style/MyStyle" android:text="5卸载" />
<Button android:onClick="click_Added" style="@style/MyStyle" android:text="6安装" />
</TableRow>
<TableRow>
<Button android:onClick="click_SenTo" style="@style/MyStyle" android:text="7调用发邮件" />
<Button android:onClick="click_Sms" style="@style/MyStyle" android:text="8发短信" />
</TableRow>
提示:记得把页面布局换成TableLayout
二、为了layout界面代码重用,在【styles.xml】中加入自定义样式:
<style name="MyStyle">
<!--我定义的按钮样式-->
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_marginLeft">4dp</item>
<item name="android:layout_marginStart">4dp</item>
<item name="android:layout_marginTop">4dp</item>
<item name="android:textColor">#ff0000</item>
</style>d:textColor"> #ff0000</item>
三、在主页面【MainActivity.java】添加各按钮响应事件:
public void click_Web(View v) {
Intent intent = new Intent();
//设置动作为android.intent.action.VIEW
intent.setAction("android.intent.action.VIEW");
//设置要打开的网址
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
// 2地图
public void click_Geo(View v) {
Intent intent = new Intent();
//设置动作为android.intent.action.VIEW
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.parse("geo:38.899533,-77.036476"));
startActivity(intent);
}
// 3调拨打电话界面
public void click_DiaL(View v) {
Uri telUri = Uri.parse("tel:100861");
Intent intent = new Intent(Intent.ACTION_DIAL, telUri);
startActivity(intent);
}
// 4直接拨打电话
public void click_Call(View v) {
Uri telUri = Uri.parse("tel:100861");
Intent intent = new Intent(Intent.ACTION_CALL, telUri);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
startActivity(intent);
} }
// 5卸载
public void click_Delete(View v){
Uri uninstallUri = Uri.fromParts("package", "com.example.administrator.openbrowsertest", null);
Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);
startActivity(intent);
}
// 6安装
public void click_Added(View v) {
Uri installUri = Uri.fromParts("package", "com.example.administrator.openbrowsertest", null);
Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
startActivity(intent);
}
//7调用发邮件
public void click_SenTo(View v) {
Uri emailUri = Uri.parse("mailto:Da_xiong@163.com");
Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);
startActivity(intent);
}
//8发短信
public void click_Sms(View v) {
Log.v("activity传数据测试");
String phoneNumber = "100861";
String message = "11111";
Intent intent2 = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phoneNumber));
intent2.putExtra("sms_body", message);
startActivity(intent2);
}
坑1:拨打电话,需要在【Manifestx.xml】中添加Permission权限
添加位置:在<manifest之后,<application之前;
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.INTERNET"/>
坑2:拨打电话还需要开启手机或模拟器里的应用权限,有的默认关闭。