Intent
连接Activity、Service、BroadcastReceiver形成一个APP
Intent的基本应用:
- Activity之间的传递
- 开启一个Service,比如后台下载
- 传递广播
Intent对象的属性
Componentname属性
- setComponent()
第一个参数:应用的包名
第二个参数:要启动的组件的类名
Intent intent=new Intent();
ComponentName componentName=new ComponentName("com.example.intent","com.example.intent.DetailActivity");
intent.setComponent(componentName);
startActivity(intent);
MainActivity :
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.btn1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
ComponentName componentName=new ComponentName("com.example.intent","com.example.intent.DetailActivity");
intent.setComponent(componentName);
startActivity(intent);
}
});
}
}
DetailActivity:
public class DetailActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
}
}
Action和Data属性
- Action指定那个将要执行的动作
- Data指定具体的数据
例如:
因此,一般结合使用。
具体案例:实现打电话、发短信功能
可以参考下面这篇文章:
https://blog.csdn.net/qq_44824148/article/details/106853990
Action和Category属性
- Action指定那个将要执行的动作
- Category对动作类别进行指定
具体案例:按键实现返回主页面
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_index);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Button button=(Button)findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.setAction(intent.ACTION_MAIN);
intent.addCategory(intent.CATEGORY_HOME);
startActivity(intent);
}
});
}
Extras属性
- 应用于多个Activity进行数据交换
- putExtras()、getExtras()
Flags属性
- 程序启动之后如何处理
intent.setFlags (intent.FLAG_ ACTIVITY_NO_HISTORY);
相当于重新启动
Intent种类
显式Intent
创建Intent对象时指定目标组件名称启动目标组件
隐式Intent
创建Intent对象时指定action、category、dataAndroid系统自动匹配目标组件
Intent intent=new Intent();
intent.setAction(intent.ACTION_ VIEW);
intent.setData(Uri.parse("http://www.mingribook.com"));
startActivity(intent);
显式Intent和隐式Intent的区别
显式Intent :
- 直接指定目标组件的名称
- 多用于在应用程序内部传递信息
隐式Intent :
- 不会用组件名称定义要激活的目标组件
- 多用于在不同应用程序之间传递消息
- 过滤器
通过< intent-filter >标记在AndroidManifest.xml文件中配置
<intent-filter>
<action...../>
<categor...../>
<data...../>
</intent-filter>
具体案例:跳转到另一个Activity,实现全屏预览图片
具体点击下面链接
https://blog.csdn.net/qq_44824148/article/details/106895386