您的位置:首页 > 移动开发 > Android开发

Android:通过意图启动其他程序、Uri、setAction、setData、setDataAndType 推荐

2013-05-27 20:58 363 查看
Uri、setAction、setData通过按钮启动其他程序:
//通过隐式意图启动其他程序
private void btn2Click()//浏览某个网页
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri data = Uri.parse("http://www.163.com");
intent.setData(data);
startActivity(intent);
}
private void btn1Click()//通过按钮启动拨号
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);//自动拨号需要设置权限,CALL_PHONE

//intent.setAction(Intent.ACTION_DIAL);//跳转到拨号界面
//Uri.fromFile(file)打开某个文件
Uri data = Uri.parse("tel:110");//号码的uri标示符格式
intent.setData(data);
startActivity(intent);
}


btn1Click的XML权限配置:

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


通过隐式意图从一个项目启动另一个项目:

//通过隐式意图从一个项目启动另一个项目
private void btn1Click()
{
Intent intent = new Intent();
//intent.setAction("com.example.aex60");

/**1.setData后,如果隐式意图里没有组件有设置data的filter,则fc错误。
*2.setAction与setData并列关系(或的关系),隐式意图里两个都设置了,启动设置只要满足其一便能启动
*3.setData(Uri.parse("http://"))设置这个默认可以启动浏览器
*4.<data android:scheme="http" android:host="www.163.com" android:path="/note" mimeType="mnt/png"/>
*   scheme="http":协议,data为Uri.parse("http:")
*   host="www.163.com":地址
*   path="/note":(类似)文件夹等,前面必须加/。
*   mimeType="mnt/png":(类似)文件类型。
*
*   scheme、host、path、mimeType是与的关系。
*
*5.intent.setData(data);
*  intent.setType("mnt/png");
*  这两项不能分开写,需要使用 setDataAndType().
*
*6.intent.addCategory("xxxx.xxx");此方法可以增加过滤判断条件
*/

//      Uri data = Uri.parse("http:");//浏览器协议要加":",scheme="http"
Uri data = Uri.parse("http://www.163.com/note");

//        intent.setData(data);
//        intent.setType("mnt/png");
intent.setDataAndType(data, "mnt/png");
startActivity(intent);
}


另一个项目的XML配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aex60_2_intentfilter_data_componet"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.aex60_2_intentfilter_data_componet.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="com.example.aex60" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="www.163.com" android:path="/note"
android:mimeType="mnt/png"/>
</intent-filter>
</activity>
</application>
</manifest>


==============================================================
其他笔记:
1.发送邮件
//建立Intent对象
Intent intent = new Intent();
//设置对象动作
intent.setAction(Intent.ACTION_SEND);
//设置对方邮件地址
intent.putExtra(Intent.EXTRA_EMAIL, new String[]
{ "abc@com.cn","edf@com.cn" });
//设置标题内容
intent.putExtra(Intent.EXTRA_SUBJECT, "test");
//设置邮件文本内容
intent.putExtra(Intent.EXTRA_TEXT, "test mail");
启动一个新的ACTIVITY,"Sending mail..."是在启动这个
ACTIVITY的等待时间时所显示的文字
startActivity(Intent.createChooser(intent, "Sending
mail..."));


注:
createChooser()方法设置应用选择器.


2.启动邮箱客户端
//启动邮箱客户端
private void clickEmail()
{
Intent mIntent = new Intent();
ComponentName comp = new ComponentName("com.android.email",
"com.android.email.activity.Welcome");
mIntent.setComponent(comp);
mIntent.setAction("android.intent.action.MAIN");
startActivity(mIntent);
}


3.直接到邮件发送界面
//发送邮件
private void clickEmail()
{
Uri uri = Uri.parse("mailto:housebox@manjay.com");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);
}


4.android直拨分机号码方法
在主机与分机号码之间加两到三个","即可。
public class MainActivity extends Activity
{

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final String num = "@#!4$0^0*(_-7)0-0,1 2=34" + "转" + "80067";

//正则保留数字和中文("转"),将"转"替换为",,"直拨分机号
String regEx = "[^0-9\u4e00-\u9fa5]+";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(num);
String str = m.replaceAll("");
final String phone = str.replaceAll("转", ",,");
//输出结果:4007001234,,80067"

final TextView textView = (TextView) findViewById(R.id.textView1);
findViewById(R.id.button1).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
textView.setText(phone);
callPhone(phone);
}
});
}

public void callPhone(String num)
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);// 自动拨号需要设置权限,CALL_PHONE
Uri data = Uri.parse("tel:" + num);
intent.setData(data);
startActivity(intent);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息