• 阅读《Android 从入门到精通》(33)——Intent 分类


    Intent 分类

    显式 Intent:Intent("android.intent.action.CALL", Uri.parse("tel:" + string));
    须要指明名字启动。用于程序内多 Activity 交互,通经常使用于应用程序内部消息,有名 Action Intent。


    隐式 Intent:一般不指明名字,而是採用广播的形式,一般是 Broadcast Intent。

    Action Intent:


    动作非常大程度上决定了剩下的 Intent 怎样构建,特别是数据(data)和附加(extras)字段,就像一个方法名决定了參数和返回值。

    因此,Intent 对象动作通过 setAction 设置后。详细的 Action 具有详细的数据格式要求。比方:ACTION_EDIT 的数据字段将包括用于编辑文档的 URL;ACTION_CALL 则是 tel:URL。此外,还应了解数据格式类型。比方获取的数据是音频、视频、文字、图像还是其它,这就须要通过 setType 指定 MIME。经常使用的 Category 例如以下:

    CATEGORY_BROWSABLE
    CATEGORY_GADGET
    CATEGORY_HOME
    CATEGORY_LAUNCHER
    CATEGORY_PREFERENCE

    addCategory 用于加入一个种类到 Intent。与此相应的是 removeCategory 用于删除前一个种类。一个Intent 能够有多个 Category,getCategories 用于获取 Intent 中的全部种类

    Broadcast Intent

    Action Intent 仅仅能被一个指定的 Activity 响应,假设须要推送通知这种广播信息。则须要 Broadcast Intent

    Broadcast Intent 处理流程


    注冊 Broadcast Intent 步骤

    继承 BroadcastReceiver,并重写 onReceiver 方法:

    package com.sweetlover.camera2basic;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    public class MyReceiver extends BroadcastReceiver {
    
    	@Override
    	public void onReceive(Context arg0, Intent arg1) {
    		// TODO Auto-generated method stub
    		
    	}
    
    }
    

    依据 IntentFilter 注冊 Broadcast Intent

    Java 注冊

    IntentFilter myFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVER");
    MyReceiver myReceiver = new MyReceiver();
    Context.registerReceiver(myReceiver, myFilter);

    XML 注冊

    <receiver android:name=".MyReceiver">
    	<intent-filter>
    		<action android:name="<receiver android:name=".MyReceiver">
    	</intent-filter>
    </receiver>

    广播


    接收

    Broadcast Receiver 接收到 Intent 后对其推断,符合条件则响应 onReceiver 方法

    public void onReceiver(Context myContext, Intent myIntent) {
    	if (myIntent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
    		// TODO 电量低时切换到节电模式,关闭 WIFI 和 GPS
    	}
    }

    销毁

    每当 Receiver 响应一个 Intent 后就被自己主动销毁,Receiver 有时间限制,超时则觉得程序无响应

    详细演示样例

    1.MainActivity.java

    @Override
    protected void onStart() {
    	// TODO Auto-generated method stub
    	super.onStart();
    		
    	try {
    		Thread.sleep(5000);
    	} catch (InterruptedException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    	final Intent intent = new Intent(MY_NEW_LIFEFORM);
    	sendBroadcast(intent);
    }

    2.Receiver.java

    package com.sweetlover.activity;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    public class Receiver extends BroadcastReceiver {
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		// TODO Auto-generated method stub
    		Toast.makeText(context, "收到广播信息", Toast.LENGTH_SHORT).show();
    	}
    }
    

    3.activity_main.xml

    加入一个空的 LinearLayout 布局就可以

    4.AndroidManifest.xml

    在 <application> 标签里面加入

            <receiver android:name="com.sweetlover.activity.Receiver">
                <intent-filter>
                    <action android:name="com.china.ui.NEW_LIFEFORM" />
                </intent-filter>
            </receiver>

  • 相关阅读:
    Unity Shader 之 渲染流水线
    C# 如何快速取到enum中的枚举数量
    Unity NGUI ScrollView 苹果式滑动
    多元线性回归~ML
    梯度下降~ML
    代价函数~ML
    ML~线性代数~python
    unity 大游戏使用什么框架
    C# Activator.CreateInstance()方法使用
    VSync Count 垂直同步
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7189820.html
Copyright © 2020-2023  润新知