android通用Intent

本文将讲解一下隐式Intent:


1. 创建闹钟


使用ACTION_SET_ALARM操作,还可以带一些extra指定时间和消息等闹铃详细信息。

extra:

  1.  EXTRA_HOUR 闹铃的小时
  2.  EXTRA_MINUTES 闹铃的分钟
  3. EXTRA_MESSAGE 用于标识闹铃的自定义消息
  4. EXTRA_DAYS 对于一次性闹钟,无需指定此extra
  5. EXTRA_RINGTONE 用于指定闹铃使用大量铃声,若使用默认,则无需指定
  6. EXTRA_VIBRATE 布尔值,用于指定该闹铃触发时是否震动
  7. EXTRA_SKIP_UI 布尔值,用于指定响应闹铃的应用在设置或在设置中是否跳过UI,若true,则跳过   
notice:android2.3(API9)及更高版本上只提供了小时,分钟和消息extra,其他的extra是在更新版本的平台上新增的

示例Intent:

public void createAlarm(String message, int hour, int minutes) {
     Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_HOUR, hour)
            .putExtra(AlarmClock.EXTRA_MINUTES, minutes);
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivity(intent);
     }
 }
 notice: 为了调用ACTION_SET_ALARM,还有在清单Manifest中设置SET_ALARM权限

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

示例Intent Filter

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_ALARM" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>


2. 创建定时器


使用ACTION_SET_TIMER操作,还可以带一些extra指定持续时间等定时器详细信息。

extra:

  1. EXTRA_LENGTH       以秒为单位的定时器定时长度
  2. EXTRA_MESSAGE     用于标识定时器的自定义消息
  3. EXTRA_SKIP_UI         布尔值,用于指定响应定时器的应用在设置定时器时是否跳过UI

示例Intent:

public void startTimer(String message, int seconds) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

notice: 为了调用ACTION_SET_TIMER,还有在清单Manifest中设置SET_ALARM权限

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

示例Intent Filter

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_ALARM" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>


3. 显示所有闹铃


使用ACTION_SHOW_ALARMS操作

notice:使用此Intent,api必须大于等于android4.4(api19)

示例过滤器Intent Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SHOW_ALARMS" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>


4. 日历(添加日历事件)


使用ACTION_INSERT操作指定具有Event.CONTENT_URI的数据URI向用户的日历添加新事件

数据URI :        Event.CONTENT_URI

MIME类型  : "vnd.android.cursor.dir/event"

Extra

  1. EXTRA_EVENT_ALL_DAY          布尔值,指定此事件是否为全天事件
  2. EXTRA_EVENT_BEGIN_TIME     事件的开始时间(从新纪年开始计算的毫秒数)
  3. EXTRA_EVENT_END_TIME        事件的结束时间(从新纪年开始计算的毫秒数)
  4. TITLE                                         事件标题
  5. DESCRIPITION                          事件说明
  6. EVENT_LOCATION                    事件地点
  7. EXTRA_EMAIL                            以逗号分隔的受邀这电子邮件地址列表

示例Intent:

public void addEvent(String title, String location, Calendar begin, Calendar end) {
    Intent intent = new Intent(Intent.ACTION_INSERT)
            .setData(Events.CONTENT_URI)
            .putExtra(Events.TITLE, title)
            .putExtra(Events.EVENT_LOCATION, location)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
示例Intent Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.INSERT" />
        <data android:mimeType="vnd.android.cursor.dir/event" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>


5. 相机  (拍照或视频以及回调)


使用ACTION_IMAGE_CAPTUREACTION_VIDEO_CAPTURE操作,此外,还可以在EXTRA_OUTPUT  extra中指定照片或视频保存的URI位置

Extra:

  1. EXTRA_OUTPUT   相机应用应将照片或视频文件保存到URI位置(Uri对象形式)

然后重写onActivityResult()回调,可以通过EXTRA_OUTPUT值指定的URI访问照片或视频

notice: 当你使用ACTION_IMAGE_CAPTURE拍照时,相机可能还会在结果Intent中返回缩小尺寸的缩略图,以Bitmap形式保存在名为“data”的extra字段中

示例Intent:

static final int REQUEST_IMAGE_CAPTURE = 1;
static final Uri mLocationForPhotos;

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(mLocationForPhotos, targetFilename));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelable("data");
        // Do other work with full size photo saved in mLocationForPhotos
        ...
    }
}
示例Intent Filter

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
处理此Intent时,Activity应检查传入Intent中有无EXTRA_OUTPUT  extra,然后将拍摄的图片和视频保存在该extra指定的位置,并调用带Intent的setResult()。


6. 调用图库


使用ACTION_GET_CONTENT操作并指定所需MIME类型选择文档或照片等文件并向你应用返回文件引用。

回调到onActivityResult()方法的结果Intent包括数据具有指向该文件的URI,该Uri可以是任何类型,如http:URI,file:URI或content:URI,

不过,如果将可选择的文件限定为(content:URI)访问文件,以及通过 openFileDescriptor()以文件流形式提供的文件,此时应该为Intent

添加CATEGORY_OPENABLE。

在android4.3(api18)及更高版本中,还可以添加EXTRA_ALLOW_MULTIPLE并将其设置为true允许选择多个文件,然后在getClipData()返回

的ClipData对象中访问每一个选定的文件。

MIME类型 : 与应选择的文件类型对应的MIME类型

Extra:

  1. EXTRA_ALLOW_MULTIPLE 布尔值,声明是否可以一次选择多个文件
  2. EXTRA_LOCAL_ONLY 布尔值,声明是否返回的文件必须直接存在于设备上,而不是需要从远程服务下载。

获取照片示例Intent:

static final int REQUEST_IMAGE_GET = 1;

 public void selectImage() {
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
     intent.setType("image/*");
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivityForResult(intent, REQUEST_IMAGE_GET);
     }
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
         Bitmap thumbnail = data.getParcelable("data");
         Uri fullPhotoUri = data.getData();
         // Do work with photo saved at fullPhotoUri
         ...
     }
 }
返回照片示例Intent Filter:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The OPENABLE category declares that the returned file is accessible
             from a content provider that supports OpenableColumns
             and ContentResolver.openFileDescriptor() -->
        <category android:name="android.intent.category.OPENABLE" />
    </intent-filter>
</activity>

















































































  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值