Android基础_Intent

intent—意图
作用:
  • 用于应用程序之间,协调应用之间的通讯和交互
  • 用于应用程序内部交互,可以携带一次操作的动作,以及动作涉及的数据,附加数据等信息
Intent对象七大属性:(六大属性)
  1. ConmponentName:组件名
  2. Action:动作
  3. Data:数据
  4. Extras:类型
  5. Extras:附加信息
  6. Category:类别
  7. Flag:标志

ComponentName:组件名,指定目标类名,用来处理intent的匹配问题。可不设置,设置了的intent叫显式intent没有设置的intent叫隐式intent

Action:动作,描述intent的动作,intent类中定义了一系列的意图动作
  ACTION_CALL            activity               启动一个电话.
  ACTION_SENDTO          activity               发短信.
  ACTION_VIEW            activity               打开页面.
  ACTION_EDIT            activity               显示用户编辑的数据.
  ACTION_MAIN            activity               作为Task中第一个Activity启动
  ACTION_SYNC            activity               同步手机与数据服务器上的数据.
  ACTION_BATTERY_LOW     broadcast receiver     电池电量过低警告.
  ACTION_HEADSET_PLUG    broadcast receiver     插拔耳机警告
  ACTION_SCREEN_ON       broadcast receiver     屏幕变亮警告.
  ACTION_TIMEZONE_CHANGED   broadcast receiver  改变时区警告.

Data:数据,intent要操作的数据,Android中用指定一个URI来表示
tel:// 打电话 tel://10086
smsto:// 发短信 smsto://10086
http:// 打开网页
file:/// 打开本地文件 file:///mnt/sdcard/mp3/a.mp3
mailto:// 电子邮件,后接收件人地址 mailto://xxx@163.com
geo:// 地理位置信息,后接经纬度
content:// 内容,后接内容的定位 content://contacts/people/1

Type:类型,指定intent的数据的类型
intent.setDataAndType(URI data,String type);
Extras:附加信息,用来传值,一种键值对结构
           intent.putExtra("key",value);
Category:类别,被执行动作的附加信息,一般被设置在IntentFilter中
            CATEGORY_LAUNCHER    表示Intent 的接受者应该在Launcher中作为顶级应用出现
  CATEGORY_DEFAULT     默认的,Android系统会给隐式Intent自动加上这个值
  CATEGORY_HOME        显示Home界面的Activity,可以使用这个常量来显示Home界面
  CATEGORY_BROWSABLE   目标Activity可以被浏览器使用超链接触发,并能显示相应数据           
Flags:标志位,多用于Task和Activity栈的处理中
            可以通过不同的Flags来告诉系统,Activity属于那个Task
            一个Activity被启动或停止后在Activity栈中的位置如何改变等
Action,Data、Type,Category去描述一个意图
            

部分系统调用,以下代码在荣耀H60-L11测试通过
package com.ztt.android_intent;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity
{
	private Context context;
	private ImageView imgView;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		context = MainActivity.this;
		imgView = (ImageView) findViewById(R.id.main_img);
	}

	// 打开网页
	public void onClick_view(View view)
	{
		Intent intent = new Intent();
		Uri uri = Uri.parse("http://www.baidu.com");
		intent.setAction(Intent.ACTION_VIEW);
		intent.setData(uri);
		startActivity(intent);
	}

	// 打开拨号键盘
	public void onClick_opentel(View view)
	{
		Uri uri = Uri.parse("tel:10086");
		startActivity(new Intent(Intent.ACTION_VIEW, uri));
	}

	// 拨出号码,需要添加权限:<uses-permission android:name="android.permission.CALL_PHONE"
	// />
	public void onClick_tel(View view)
	{
		Uri uri = Uri.parse("tel:10086");
		Intent intent = new Intent(Intent.ACTION_CALL, uri);
		startActivity(intent);
	}

	// 打开短信 并指定号码和内容
	public void onClick_sms(View view)
	{
		Intent intent = new Intent(Intent.ACTION_SENDTO);
		intent.putExtra("sms_body", "1");
		intent.setData(Uri.parse("smsto:10086"));
		startActivity(intent);
	}

	// 发送短信
	public void onClick_sendSms(View view)
	{
		String phoneNumber = "10086";
		String smsBody = "1";
		SmsManager mSmsManager = SmsManager.getDefault();

		/*
		 * 处理返回的发送状态
		 */
		String SENT_SMS_ACTION = "SENT_SMS_ACTION";
		Intent sentIntent = new Intent(SENT_SMS_ACTION);
		PendingIntent sendIntent = PendingIntent.getBroadcast(context, 0,
				sentIntent, 0);
		context.registerReceiver(new BroadcastReceiver()
		{
			@Override
			public void onReceive(Context _context, Intent _intent)
			{
				switch (getResultCode())
				{
				case Activity.RESULT_OK:
					Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT)
							.show();
					break;
				case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
				case SmsManager.RESULT_ERROR_RADIO_OFF:
				case SmsManager.RESULT_ERROR_NULL_PDU:
					Toast.makeText(context, "短信发送失败", Toast.LENGTH_SHORT).show();
					break;
				}
			}
		}, new IntentFilter(SENT_SMS_ACTION));

		/*
		 * 处理返回的接收状态
		 */
		String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
		Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
		PendingIntent backIntent = PendingIntent.getBroadcast(context, 0,
				deliverIntent, 0);
		context.registerReceiver(new BroadcastReceiver()
		{
			@Override
			public void onReceive(Context _context, Intent _intent)
			{
				Toast.makeText(context, "收信人已经成功接收", Toast.LENGTH_SHORT).show();
			}
		}, new IntentFilter(DELIVERED_SMS_ACTION));

		// 短信长度限制,达到上限自动分割
		List<String> divideContents = mSmsManager.divideMessage(smsBody);
		for (String text : divideContents)
		{
			// 五个参数
			// 1、接收信息号码2、服务中心地址,设为null使用短信中的3、信息内容4、发送响应报告,不需要则设为null5、对方接收响应报告,不需要则设为null
			mSmsManager.sendTextMessage(phoneNumber, null, text, sendIntent,
					backIntent);
		}
	}

	// 卸载软件
	public void onClick_uninstall(View view)
	{
		Uri uri = Uri.fromParts("package", "com.ztt.android_activity", null);
		Intent it = new Intent(Intent.ACTION_DELETE, uri);
		startActivity(it);
	}

	// 安装软件
	public void onClick_install(View view)
	{
		String str = "/software/jsq.apk";
		String fileName = Environment.getExternalStorageDirectory() + str;
		Intent intent = new Intent(Intent.ACTION_VIEW);
		intent.setDataAndType(Uri.fromFile(new File(fileName)),
				"application/vnd.android.package-archive");
		startActivity(intent);
	}

	// 打开应用
	public void onClick_pen(View view)
	{
		String packageName = "com.ztt.android_activity";
		PackageInfo packageInfo = null;
		
		if (checkApkExist(context, packageName))// 判断此应用是否正确安装
		{
			try
			{
				packageInfo = getPackageManager().getPackageInfo(packageName, 0);
			} catch (NameNotFoundException e)
			{
				e.printStackTrace();
			}
		}else {
			Toast.makeText(context, "没有安装此程序", 0).show();
			return;
		}
		Intent resolveIntent = new Intent();
		resolveIntent.setAction(Intent.ACTION_MAIN);
		resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
		resolveIntent.setPackage(packageInfo.packageName);
		// 根据intent筛选Activity
		List<ResolveInfo> resolveinfoList = getPackageManager().queryIntentActivities(resolveIntent, PackageManager. GET_INTENT_FILTERS);
		
		ResolveInfo resolveinfo = resolveinfoList.iterator().next();
		if (resolveinfo != null)
		{
			// 获取到MainActivity的名字
			String className = resolveinfo.activityInfo.name;
			Intent intent = new Intent(Intent.ACTION_MAIN);
			intent.addCategory(Intent.CATEGORY_LAUNCHER);
			// 设置ComponentName参数1:要启动程序的packagename2:要启动程序的MainActivity
			ComponentName cn = new ComponentName(packageName, className);

			intent.setComponent(cn);
			startActivity(intent);
		}
	}

	/**
	 * @Title: checkApkExist
	 * @Description: 判断应用是否安装
	 */
	public boolean checkApkExist(Context context, String packageName)
	{
		if (packageName == null || "".equals(packageName))
			return false;
		try
		{
			ApplicationInfo info = context.getPackageManager()
					.getApplicationInfo(packageName,PackageManager.GET_UNINSTALLED_PACKAGES);
			return true;
		} catch (NameNotFoundException e)
		{
			return false;
		}
	}
	
	// 打开相机
	public void onClick_c(View view)
	{
		// 打开相册
//		Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
		Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		startActivityForResult(intent, 1); 
	}
	public void onClick_photo(View view)
	{
		Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
		startActivityForResult(intent, 2); 
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		super.onActivityResult(requestCode, resultCode, data);

		switch (requestCode)
		{
		case 1:
			if (resultCode == Activity.RESULT_OK)
			{
				  Bundle bundle = data.getExtras();
		          Bitmap bitmap = (Bitmap) bundle.get("data");
		          imgView.setImageBitmap(bitmap);
			}
			break;
		case 2:
			if (resultCode == Activity.RESULT_OK)
			{
				Uri uri = data.getData();
				Bitmap bitmap;
				try
				{
					bitmap = BitmapFactory.decodeStream(getContentResolver()
							.openInputStream(uri));
					imgView.setImageBitmap(bitmap);
				} catch (FileNotFoundException e)
				{
					e.printStackTrace();
				}
			}
			break;
		}
	}
}

代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值