Intent 意图
打开新界面
新的界面要AndroidManifest.xml加东西 Application最下面Add
Intent intent = new Intent(MainActivity.this, com.example.misss.Mainnew.class); //(环境, 包名->新界面名)
startActivity(intent); /*开始行动*/
隐式意图 启动界面 (可以打开另一个项目的隐式界面)
- 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
- 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。
- 为什么用隐式intent:因为有时需要调用系统的Activity,或者说希望用户不用默认的而用自己应用时,就会将自己的设置为与默认应用相同的过滤器,当用户选择时,自己的应用就可以供用户选择。
隐式Intent的Activity:AndroidManifest.xml配置
<activity
<intent-filter>
<action android:name="com.example.inten_y.sssb"/> 隐式启动的界面 名称
<category android:name="android.intent.category.DEFAULT"/> 隐式启动的界面 一般是
<data android:mimeType="aa/bb" android:scheme="itheima" /> 隐式启动的界面 数据设定
<intent-filter>
...
启动隐式Intent代码:
Intent intent = new Intent();
intent.setAction("com.example.inten_y.sssb"); //隐式启动的界面名
intent.addCategory("android.intent.category.DEFAULT"); //隐式启动模式?
//intent.setData(Uri.parse("itheima:"+110)); //设置数据,通常是系统界面需要 要和要调用的界面的清单文件中的设置一样
//intent.setType("aa/bb"); .//设置数据类型 要和要调用的界面的清单文件中的设置一样
//intent.setDataAndType(Uri.parse("itheima:"+110),"aa/bb"); //两样需要同时设置时需要用这个方法
startActivity(intent);
隐式意图的界面获取数据:
Intent intent = getIntent();
Uri data = intent.getData();
String scheme = data.getScheme();
...
界面间的数据传递
打开新界面并发送数据:
Intent intent = new Intent();
intent.setClass(MainActivity.this, newmain.class); /*环境,新界面*/
intent.putExtra("key","Value"); /*放入(名称 值)*/
Bundle bundle = new Bundle();
bundle.putString("a", "omg");
bundle.putInt("b", 86);
intent.putExtra("Bundle1", bundle); /*放入(Bundle对象)*/
//startActivity(intent);
startActivityForResult(intent,1);
新界面中接收数据:
//获取传递的值
Intent intent = getIntent(); /*获取传递的意图*/
String value = intent.getStringExtra("key"); /*根据名称取值*/
Bundle bundle = intent.getBundleExtra("Bundle1");/*获取Bundle对象*/
String strName = bundle.getString("a");
Integer nValue = bundle.getInt("b");
//设置返回的数据,并关闭新界面
Intent intent = new Intent();
intent.putExtra("return", "返回去的值");
setResult(10, intent); //返回给调用者
finish(); //关闭界面
原界面接收打开的新界面关闭时的返回数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode ==1 && resultCode == 10) String s = data.getStringExtra("return"); //接收数据
super.onActivityResult(requestCode, resultCode, data);
}
打电话
//Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel://110"));//精简版
Intent intent = new Intent(); // Intent::意图 -> 意图干嘛 -> 意图打电话
intent.setAction(Intent.ACTION_DIAL); //想要做什么->打电话-转到拨号
//intent.setAction(Intent.ACTION_CALL); //打电话-直接打( 需要权限android.permission.CALL_PHONE )
intent.setData(Uri.parse("tel://"+119)); //打哪个电话->这个119 Uri::统一的资源标示符(网络地址)
startActivity(intent);//开始行动
发短信
打开发送短信的界面
Intent intent = new Intent();
intent.setAction("android.intent.action.SEND"); //打开系统短信界面
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("text/plain");
intent.putExtra("sms_body","你好啊,最近过得怎样"); //传递短信内容
startActivity(intent);
直接发短信: (需要权限 android.permission.SEND_SMS )
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> divideMessages = smsManager.divideMessage("发送的短信内容,太长就下面的for循环截断,分成几条短信发送,中文最多70个字符,英文140个?还是160?");
for(String div : divideMessages){ //自动截断处理
smsManager.sendTextMessage("12315", null,div,null,null);//(发送给谁,服务中心号码,短信内容,发送成功的广播,发送失败的广播)
}
拍照与录像
未解之谜
//这是什么?????????注释的这些
//intent.setClass(MainActivity.this, MainActivity.class); //根据包名,类名,来唯一确定Activity
//intent.setClassName(MainActivity.this, "com.example.lauchintenproj.MainActivity"); //字符串来定位
//intent.setClassName("com.example.lauchintenproj", "com.example.lauchintenproj.MainActivity");