Posts tagged ‘Activity’

Android开发 Activity通过AIDL与Service通讯 实现进程间通讯

AIDL全称Android Interface Definition Language,即Android接口定义语言,通过它可以在进程间通讯,今天的例子演示的是在Activity与Service间通讯。
程序结构:
包com.example.aidl中有五个文件
AIDLService.java: Service
MainActivity.java: 第一个Activity,在这里启动Service,并与之通讯
People.java: JavaBean,两字段,name,age,一方法say
SecondActivity.java: 第二个Activity,与在MainActivity中启动的AIDLService通讯
PeopleAIDL.aidl AIDL定义文件,其实就是一个Interface,但扩展名不是java,添加这个文件后,在gen目录下会自动生成PeopleAIDL.java.
本例使用了AndroidAnnotations框架,没接触过的童鞋可能会看不太懂,但其实这个框架也蛮简单的,参考前文AndroidAnnotations框架@Ebean,@RootContext,@Background,@UiThread,@AfterInject,@AfterTextChange标签的使用方法,一看就明白。
Continue reading “Android开发 Activity通过AIDL与Service通讯 实现进程间通讯” »

关闭Activity间切换时的动画效果

用下面的方法关闭Activity间切换时动画效果,有个副作用,就是欲打开的Activity必须是新开,没有在内存中,所以每次startActivity后,需要把自己finish掉,不能加FLAG_ACTIVITY_REORDER_TO_FRONT。


Intent intent = new Intent(this, Target.class);
startActivity(intent);
finish();
overridePendingTransition(0, 0);
//无动画

网页返回 重新启动Activity实例的解决

最近在写一个微博应用,需要用到OAuth授权,机制是这样的,先是客户端向服务器请求一个oauth_token,再根据这个oauth_token构造一个让用户授权的URL,转到浏览器,在浏览器中打开,让用户输入帐号密码.然后通过设置自定义协议让浏览器返回时转到指定的Activity.之前跳转到浏览器和让浏览器返回启动的是同一个Activity,但是发现,浏览器返回时不是调用已启动的Activity的 OnNewIntent 方法,而是重新启动一个实例,导致内存中有两个该Activity实例.通过设置android:launchMode解决: Continue reading “网页返回 重新启动Activity实例的解决” »

Android Activity中启动另一应用程序的方法,无需得到类名

在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和类名。但是人家的程序,我们怎么可能知道哪个是第一个启动的Activity?所以,真正用在项目上,那种方法基本上没什么用的。于是查看官方文档,发现这样一个方法


public abstract Intent getLaunchIntentForPackage (String packageName) 

英文原文:Return a "good" intent to launch a front-door activity in a package, for use for example to implement an "open" button when browsing through packages.大概意思就是返回一个程序入口的Intent,就是Java程序的Main方法。
这下简单了,直接startActivity(返回的intent)即可。
下面的代码基于前文Android得到系统已安装应用程序包列表方法 自定义ListView显示 PackageManager的使用,直接下载前文的包,把Main.java内容替换成以下就可以:
Continue reading “Android Activity中启动另一应用程序的方法,无需得到类名” »

在一个Activity中结束另一个Activity的方法(可以用于完全退出程序)

下面的以ActivityB结束ActivityA为例:
首先在ActivityA中定义一个Activity的静态全局变量:


static Activity ActivityA;

在OnCreate()方法中给ActivityA赋值:


ActivityA=this;

在ActivityB中,需要结束ActivityA时,调用


ActivityA.ActivityA.finish();

另外,也可以在ActivityA中加入一个广播接收器,当收到广播时退出,而在ActivityB中,需要结束ActivityA时发送广播即可。

Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整

2011.10.28注:如果需要控件停在动画后的位置,需要设置android:fillAfter属性为true,在set节点中。默认在动画结束后回到动画前位置。设置android:fillAfter后,我们看到了控件留在了动画后的位置,其实也只是看到在那个位置,真实位置还是在原来动画前那里,你会发现Button不能被点击,就是这个原因。所以我们可以在动画结束后,手动把控件移动到动画结束后的位置。这就需要根结点为AbsoluteLayout,因为LinearLayout不能通过x,y座标定位。具体方法:把布局换成AbsoluteLayout,使用Animation的setAnimationListener设置动画播放事件,在onAnimationEnd方法中,使用控件的setLayoutParams方法,设置动画后的位置。

5月15日注:overridePendingTransition只支持android 2.0以上版本
Android的动画效果分为两种,一种是tweened animation(补间动画),第二种是frame by frame animation。一般我们用的是第一种。补间动画又分为AlphaAnimation,透明度转换 RotateAnimation,旋转转换 ScaleAnimation,缩放转换 TranslateAnimation 位置转换(移动)。
动画效果在anim目录下的xml文件中定义,在程序中用AnimationUtils.loadAnimation(Context context,int ResourcesId)载入成Animation对象,在需要显示动画效果时,执行需要动画的View的startAnimation方法,传入Animation,即可。切换Activity也可以应用动画效果,在startActivity方法后,执行overridePendingTransition方法,两个参数分别是切换前的动画效果,切换后的动画效果,下面的例子中传入的是两个alpha动画,以实现切换Activity时淡出淡入,渐隐渐现效果。 Continue reading “Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整” »

android 通过setContentView切换Activity的View,保存动态修改后的视图

使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。但是,在android SDK给我们建的默认的Hello World程序中,调用的是setContentView(int layoutResID)方法,如果使用该方法切换view,在切换后再切换回,无法显示切换前修改后的样子,也就是说,相当于重新显示一个view,并非是把原来的view隐藏后再显示。其实setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。
下面是代码,main.xml:
Continue reading “android 通过setContentView切换Activity的View,保存动态修改后的视图” »

用Intent在不同Activity间传送数据(主类型、对象)Serializable接口

需要在不同的Activity中传送数据,可以在原Activity用Intent跳转到新Activity的时候,附加上数据,然后在新的Activity中就可以接收到。
下面以main跳转到NA为例:
main.java中代码:


			Intent intent=new Intent();
			//生成一个Intent对象
			intent.setClass(main.this, NA.class);
			//本Activity为main,目标Activity为NA
			intent.putExtra("et1", et1.getText().toString());
			//et1是一个文本输入框,et2也是一样
			intent.putExtra("et2",et2.getText().toString());
			main.this.startActivity(intent);
			//启动跳转

NA.java接收数据:
Continue reading “用Intent在不同Activity间传送数据(主类型、对象)Serializable接口” »