Android Intent

关于

对比android 和 IOS的很大不同点是, iOS的应用是沙箱,android的应用却可以相互调用。 而Intent主要解决的问题就是解决android 应用组件之间的通讯问题。 Intent
也可以理解为对将要执行的操作的抽象描述。

构造

    public Intent(Context packageContext, Class<?> cls)

Intent 启动activity

    // Activity 继承自Context的startActivity 方法    public abstract void startActivity(Intent intent, Bundle options);    // 创建itent    Intent i = new Intent(this, ImageActivity.class);    startActivity(i);

可以通过 Intent 传递一些 Flags(标识)来通知 ActivityManager 去改变既定行为。

传递值

    // 传递数据, extras 存储在 Android 的 Bundle中,Bundle 在这里可以被看做是一个可序列化的容器。    i.putExtra("A_BOOLEAN_EXTRA", true); //boolean extra    i.putExtra("AN_INTEGER_EXTRA", 3); //integer extra    i.putExtra("A_STRING_EXTRA", "three"); //integer extra
    // imageActivity    if (getIntent() != null ) {        //确认Intent非空后,可以进行诸如从extras取值什么的…        int value = getIntent().getIntExtra("AN_INTEGER_EXTRA", 0); //名称,默认值    }

假如一个对象已实现序列化接口 Serializable。接下来可以这么做:

    YourComplexObject obj = new YourComplexObject();    Intent i = new Intent(this, ImageActivity.class);    i.putSerializable("SOME_FANCY_NAME", obj); //使用接收序列化对象的方法    startActivity(i);
 YourComplexObject obj = (YourComplexObject) getIntent().getSerializableExtra("SOME_FANCY_NAME");

Itent 启动服务

Intents 和 Services 是怎么协作的呢?

首先需要一个 Intent 来启动 Service。而 Service 启动后,只要其处于非 stopped 状态,就可以持续地向它发送指令,直到它被停止(在这种情况下它将会重新启动)。

在某个 Activity 中启动服务:

    Intent i = new Intent(this, YourService.class);    i.setAction("SOME_COMMAND");    startService(i);

接下来程序执行情况取决于当下是否第一次启动服务。如果是,那么服务就会自然启动(首先执行构造方法和 onCreate() 方法)。如果该服务已经启动过,将会直接调用 onStartCommand() 方法。

    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        String action = intent.getAction();        if (action.equals("SOME_COMMAND")) {            // SOME_COMMAND 具体事件内容)        }        return START_NOT_STICKY; // 如果服务已被杀掉,不要重新启动服务    }

发送和接收到广播

 private final class ServiceReceiver extends BroadcastReceiver {    public IntentFilter intentFilter;    public ServiceReceiver() {        super();        intentFilter = new IntentFilter();        intentFilter.addAction("ACTION_PLAY");        intentFilter.addAction("ACTION_STOP");        intentFilter.addAction("ACTION_ERROR");    }    @Override    public void onReceive(final Context context, final Intent intent) {        if (intent.getAction().equals("ACTION_ERROR")) {           // 由于有错误发生,播放停止        } else if (intent.getAction().equals("ACTION_PLAY")){           // 播放视频        }        // 等等…    } }
 // Context 抽象方法  public abstract Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter);    @Override    public void onStart() {        onStart();          registerReceiver(mServiceReceiver, mServiceReceiver.intentFilter);    }    @Override    public void onStop() {        super.onStop();        unregisterReceiver(mServiceReceiver);    }

判断一个intent是否能被接受

如果应用依赖外部的activity, 但是不能保证外部应用是否已经安装, 那么可以通过packageManger来判断

    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:13422272867"));    PackageManger pm = getPackageManager();    ComponentName cn = intent.resolveActivity(pm);    if (cn == null) {        // things to do when no resolver activity         // download the application    } else {        startActivity(intent);            }

sub-activity onActivityResult()

当应用需要依赖外部应用返回值的时候,比如本地照片获取activity
启动方式为:

    startActivityForResult(intent);    @Override    public void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        switch (requestCode) {            //.....        }    }

更多相关文章

  1. Android常见面试题
  2. Android(安卓)中的WiFi学习笔记----WIFI启动 代码流程走读---网
  3. 【Android经典入门教程-上(bill译)】
  4. 记录Android应用程序行为-peachbox
  5. Android常见面试题
  6. 在网址中跳转APP(进入XXXAPP内查看)
  7. Android应用程序中应用图标和名字的设置
  8. 如何在Android中启动JAVA程序
  9. Android(安卓)SDK Manager:Failed to fetch URL http://dl-ssl.go

随机推荐

  1. Android中判断网络连接是否可用及监控网
  2. Android输入法的显示或隐藏
  3. android 小游戏 ---- 数独(二)
  4. 反编译并修复过的手写识别类--(android 搜
  5. Android处理Bitmap的一些方法
  6. Android获取屏幕宽高、屏幕密度、手动计
  7. Android入门:基本控件(一)
  8. Android中网络通信方式的简单汇总(HttpURL
  9. 代码实现android手机信号监听
  10. 下载旧版本android sdk tools