Android——Intent在Activity的使用详解-下(隐式Intent与实现调用通话、发短信和调用相机)(含源码下载)

隐式 Intent 是指在创建 Intent 对象时,不指定具体的接收者,而是定义要执行的 Action、Category 和 Data,然后让 Android 系统根据相应的匹配机制找到要启动的 Activity。例如,在Activity A 中隐式启动 Activity B 需要经过如图 2 所示的过程。
图2-隐式 Intent 示意图
这里我们要在AndroidManifest(项目清单)的定义Intent过滤器的属性:

<activity android:name=".B_Activity">
   <intent-filter>
        <action android:name="com.example.mydemo.B_Activity" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
//这是给B_Activity设置的唯一标识,与AndroidManifest的B_Activity的action同名
private final static String JUMP_TO_B = "com.example.mydemo.B_Activity";

Intent intent = new Intent();
intent.setAction(JUMP_TO_B);	//为Intent设置动作
if (intent.resolveActivity(getPackageManager()) != null){
   startActivity(intent);
}

这样就可以实现跳转到B_Activity。

从上面的例子我们可以简单了解隐式Intent的调用机制,同样调用通话,发短信和相机的机制类似。这里就不再详细讲解了。
下面贴出代码:

1.调用通话

 Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);//调用拨号面板
intent.setData(Uri.parse("tel:17772339029")); //设置要拨打的号码

if (intent.resolveActivity(getPackageManager()) != null){
    startActivity(intent);
}

注意:要在AndroidManifest里面定义置允许该应用拨打电话权限:

<uses-permission android:name="android.permission.CALL_PHONE"/>

2.调用发短信

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);//调用发送短信息面板
intent.setData(Uri.parse("smsto:17370451867"));//设置要发送的号码
intent.putExtra("sms_body","这是一条隐式调用的实例"); //设置要发送的信息内容
if (intent.resolveActivity(getPackageManager()) != null){
	startActivity(intent);
}

注意:要在AndroidManifest里面定义置允许该应用发短信的权限:

<uses-permission android:name="android.permission.SEND_SMS"/>

3.调用相机

Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//调用相机面板
if (intent.resolveActivity(getPackageManager()) != null){
	startActivityForResult(intent,REQUEST_CODE_1);
}

相机除了调用外还要通过重写onActivityResult(……)处理回传数据:

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (REQUEST_CODE_1 == requestCode){
            Bundle bundle = data.getExtras();
            Bitmap bitmap = (Bitmap) bundle.get("data");
            ivCamera.setImageBitmap(bitmap);
        }
    }

与显示的数据互传类似,不再赘述。

Android 系统为我们提供了许多的标准Activity 动作。可参考这位博主的文章学习:https://blog.csdn.net/weixin_30493401/article/details/95139578

链接:百度网盘下载 提取码:7vnk

推荐阅读:
Android——Intent在Activity的使用详解-上(Intent简介)

发布了17 篇原创文章 · 获赞 5 · 访问量 6909

猜你喜欢

转载自blog.csdn.net/qq_43567345/article/details/104347451