App之间的Activity的使用
1.调用其他程序中的Activity
1.1 直接拨号
调用系统的拨号功能拨打电话,拨号的功能对应的Action是Intent.ACTION_CALL,同时需要为这个Action指定一个Uri
代码如下:
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:15623069968"));
startActivity(callIntent);
注意:
权限的申请。
1.2 将电话号码传入拨号界面
将电话号码指定传入Android内置的拨号程序。
代码如下:
Intent dialIntent=new Intent(Intent.ACTION_DIAL,Uri.parse("tel:15623069968"))
startActivity(dialIntent);
1.3调用拨号程序
调用系统自带的拨号界面
代码如下:
Intent dialerIntent=new Intent("com.android.action.TOUCH_DIALER");
startActivity(dialerIntent);
1.4浏览网页
内置的web浏览器对外提供的Action
代码如下:
Intent webIntent=new Intent(Intent.ACTION_VIEW,Uri.parse("https://www.baidu.com/"));
startActivity(webIntent);
1.5 向E-mail客户端传递E-mail地址
E-mail客户端提供了一个ACTION,
代码如下:
Intent intent=new Intent(Intent.ACTION_SENTO,Uri.parse("mailto:WanHua@abc.com"))
startActivity(intent);
1.6查看联系人
代码如下:
Intent contactListIntent=new Intent("com.android.contacts.action.LIST_CONTACTS);
startActivity(contactListIntent);
1.7 显示系统设置界面
显示系统设置界面的Action为”android.settings.SETTINGS”;
代码如下:
Intent setIntent=new Intent("android.settings.SETTINGS");
startActivity(setIntent);
显示设置WIFI界面
Intent wifiSetIntent=new Intent("android.settings.WIFI_SETTINGS");
startActivity(wifiSetIntent);
1.8启动处理音频的程序
通过Intent.ACTION.GET_CONTENT动作来选择拥有相同类型的引用。
代码如下:
Intent audioIntent=new Intent(Intent.ACTION_GET_CONTENT);
audioIntent.setType("audio/**")
startActivity(audioIntent);
2.自定义ActivityAction
在androidMainifest.xml文件中为Activity定义的Action.都是在应用程序内部调用。这些自定义的Action同样可以在
其他应用程序中调用。
<activity android:name="com.example.administrator.diycode.activity.DiycodeMainActivity">
<intent-filter>
<action android:name="android.intent.action.DIYCODE_MAIN_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Intent otherIntent=new Intent("android.intent.action.DIYCODE_MAIN_ACTIVITY");
startActivity(otherIntent);
可以在app内部启动。也可以在第三方app中启动
/**
* 通过包名启动第三方app
* @param context
* @param packageName
*/
public static void startThridApp(Context context,String packageName){
try {
Intent minIntent = context.getPackageManager()
.getLaunchIntentForPackage(packageName);
context.startActivity(minIntent);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 已知包名和类名启动应用程序
* @param context
* @param packageName
* @param className
*/
public static void startThridApp(Context context,String packageName,String className){
try {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
context.startActivity(intent);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 已知第三方应用的包名和指定类的action启动,可以启动第三方应用的指定Activity,
* 并且传递参数,指定Activity必须设置Action;
* @param context
* @param packageName
* @param action
* @param type
* @param count
*/
public static void startThridApp(Context context,String packageName,String action,String type,int count){
try {
Intent mIntent = new Intent();
mIntent.setPackage(packageName);//包名
mIntent.setAction(action);//action
mIntent.putExtra("a", type);
mIntent.putExtra("c", count);
context.startActivity(mIntent);
}catch (Exception e){
e.printStackTrace();
}
}
3.ActivityGroup
ActivityGroup是Activity的子类,通过ActivityGroup可以将多个Activity放到一个Activity上面。这样可以单独实现屏幕的
某些部分,然后将他们组合在一起。ActivityGroup的关键是通过LocalActivityManager.startActivity方法获取Activity最顶层窗口。
再通过Window.getDecorView方法获得窗口最顶层的视图。
activity之间切换动画的效果
public void overridePendingTransition (int enterAnim, int exitAnim)
其中:
enterAnim 定义Activity进入屏幕时的动画,即将展示页面的动画
exitAnim 定义Activity退出屏幕时的动画,即将关闭或者被隐藏页面的动画
overridePendingTransition 方法必须在startActivity()或者 finish()方法的后面。
startActivity()之后使用定义的是入场动画。
finish()之后使用定义的是出场动画。
注意,在定义入场动画时,应该确保在主线程运行,否则有可能会无效。所以,
尽量在调用处用Activity.runOnUiThread(new Runnable() {XXXX});包裹。