关于Android 中appium activity 跳转转不过去,请教大神帮忙看看!

请教一个Activity跳转到另外一个Activity失败的问题 - ITeye问答
我是个新手,遇到问题:Unable to start service Intent { cmp=com.test.activity_02/.OtherActivity }: not found
网上百度答案也不能解决:百度答案是
1.检查AndroidManifest.xml配置文件中是否配置了service
2.检查service 是否在application标签内
3.如果你的service和启动的activity不在同一个包内,需要把service标签中的android:name配置成service类的完全名(全路径)
我检查了下我的代码都符合,就是在点击按钮 的时候不能跳转到下一个Activity,报出Unable to start service Intent { cmp=com.test.activity_02/.OtherActivity }: not found 错误,
请帮忙解答,谢谢,附件是我写的代码
以下是主要代码,请帮忙分析,谢谢
&manifest xmlns:android="/apk/res/android"
package="com.test.activity_02"
android:versionCode="1"
android:versionName="1.0" &
android:minSdkVersion="8"
android:targetSdkVersion="15" /&
&application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" &
android:name=".Activity_02"
android:label="@string/title" &
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
android:name=".OtherActivity"
android:label="@string/otherview"
&&/activity&
&/application&
&/manifest&
package com.test.activity_02;
import android.app.A
import android.content.I
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.TextV
public class Activity_02 extends Activity {
TextView mytestview =
Button mybutton =
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_01);
mytestview = (TextView) findViewById(R.id.mytestview);
mybutton=(Button) findViewById(R.id.mybutton);
mytestview.setText(R.string.myview);
mybutton.setText(R.string.mybutton);
mybutton.setOnClickListener(new Listener());
class Listener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(Activity_02.this, OtherActivity.class);
Activity_02.this.startService(intent);
package com.test.activity_02;
import android.app.A
import android.os.B
import android.widget.TextV
public class OtherActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
TextView othertextview = (TextView) findViewById(R.id.otherview);
othertextview.setText(R.string.otherview);
(675.9 KB)
下载次数: 2
你配置的&activity&&
&&&&&&&&&&& android:name=".OtherActivity"&
&&&&&&&&&&& android:label="@string/otherview"&
&&&&&&&&&&&& &&/activity&& 是activity~~~
但是你调用的是startService~~~
startService 和startActivity走的是不同的远程调用~~~
你把startService 改成startActivity就好了~
Activity_02.this.startService(intent);
就是这句的问题
这个语句是用来启动Service的,它是你的intent中声明的调用目的是一个Activity。
你应该使用
startActivity方法
Activity_02.this.startService(intent);
这句有问题吧?
已解决问题
未解决问题Android 基础课堂 - Lesson.6 - 如果登录成功了
Android 基础课堂
上周我们已经写完登录界面啦,也测试过登录成功和登录失败的情况了,回想一下我们在登录成功和登录失败的时候,分别做了啥呢,没错,成功和失败我们都是弹出一个toast告诉用户登录失败了或者登录成功了,然而现实的场景是什么样的呢。
在现实场景中,如果我们登录失败了,那么弹出一个toast来告知用户,这个是没有问题的,那么登录成功了呢?当然是不能弹出一个toast然后啥都不做的,正常情况下,我们都应该跳转到一个另外的页面,让用户进入到我们的APP,好,本周我们就将继续推移下去,看看登录成功的时候该做些什么。
第六课、如果登录成功了
一、场景分析
现在的APP,一般有以下两种场景:
① 刚一进入APP,就到了登录页面,用户必须通过登录才能进入到APP,才能浏览我们APP里的其他页面
② 刚一进入APP会先到达我们的主页面,用户可以对APP内的一部分页面进行浏览,而有些页面的浏览是需要登录的,当用户点击这些页面时,会唤起登录界面,让用户进行登录。一般这样的APP在个人中心也会有一个登录按钮的,通过点击登录按钮可以唤起登录界面
以上两种情况其实总体上没有太大的区别,第一种是先有登录页面,成功后唤起一个新的页面,第二种是由一个其他页面唤起登录界面,登录成功时候,做一些需要的处理然后把登录页面杀掉,这里我们主要就第一种情况进行讨论,了解了这种情况那么第二种情况自然也就能清楚的了解了
所以就第一种情况而言,就是我们上节课做的,先进入到了一个登录页面,然后让用户进行登录,用户登录失败的时候,弹出一个toast告知用户,用户登录成功的时候,我们也可以弹出一个toast告知用户登录成功了,但是只是弹出一个toast是不行的,如果登录成功了还是在登录页面,那我们登录的意义是什么,用户就只能在一个登录页面登录着玩了,所以当用户登录成功的时候,我们还需要进行页面跳转的处理,将页面跳转到我们希望用户进入到的首页面,所以,该课我们主要讲下两个activity跳转相关的内容。
二、Activity的几种跳转方式
讲到Activity的跳转,我们需要先来了解下Intent,这是跳转中最重要的东西,Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息,
① 显示调用方法:它的简单使用如下
- Intent intent=new Intent(this,OtherActivity.class);
- startActivity(intent2);
以上是Intent在跳转Activity时最简单的操作在一个Activity中通过startActivity()来跳转到另外一个Activity,此时我们就能成功的从登录页面跳转到一个我们想要跳转到的页面了,由于是从登录页面跳转的,所以在我们调用startActivity()之后,需要再调用下LoginActivity.this.finish()把登录页面销毁掉,不然用户点击返回按钮会回到登录页面,这是不合理的
关于Intent的相关知识还有很多,它的作用非常大,感兴趣的话可以对它专门了解下
② 隐式调用方法(只要action、category、data和要跳转到的Activity在AndroidManifest.xml中设置的匹配就OK)
如上图,假定有一个Activity在清单中是这样的声明的,两个都可以,那么我们就可以使用以下代码进行跳转到上面这个Activity中:
总之跳转离不开Intent,掌握好Intent将会使我们游刃有余的应对跳转
三、数据传递
既然我们已经讲了页面跳转相关的内容了,那么数据传递的内容也就在此一起提一下,数据传递是什么概念呢,举个最直接的场景吧,在登录页面,如果我们是使用用户名进行登录的,那么如果要实现登录成功后,跳转到新页面之后,在底部显示一个欢迎语,欢迎内容为“hello,xxxx”,这个xxxx即为该用户的用户名,那么我们是不是需要将登录页面的用户名传递到我们新唤醒的页面用于显示,这时候,在跳转Activity的时候,就需要连带传输数据了,那么我们就来看看数据的传递,我们主要看看我们最常用的方法,即使用Bundle进行传值
Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的,我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。当Bundle传递的是对象或对象数组时,必须实现Serializable 或Parcelable接口,简单用法如下
Intent intent=new Intent(this, OtherActivity.class);
intent.setClass();
Bundle bundle = new Bundle();
bundle.putString("标记", "放入数据");
intent.putExtras(bundle);
startActivity(intent);
通过以上步骤,我们就可以将Bundle传递到跳转到的Activity里了,自然Bundle里的数据也就一起传递过去了,那在第二个Activity里该怎么接受数据呢,可以通过getIntent().getExtras().get("key");来获取到指定key的数据,这个key就是之前设置在Bundle里面的,简单是数据传递就是这样的,甚至可以不用Bundle而直接用Intent来传递数据,还可以使用其他方法来传递,都可以通过实践来尝试看看
好了,到这我们已经完成登录成功后的跳转处理及数据传递了,关于跳转和数据传递的知识还有太多太多,不可能通过这一次全都涵盖,可以考虑将他们更完整的过一遍,这将会使我们在今后遇到这方面问题时更加游刃有余,本周的基础课堂就到这啦,让我们下周再见~
封羽(代发)1719人阅读
自定义控件(9)
& & & 前言:
& & & & 最初是在酷狗音乐上看见这个效果,看不到酷狗的源码,于是根据自己的思路写了一个。希望对大家有用,当然更希望有高人能指点指点帮助改进,因为确实还有些地方存在问题有待优化。
& & & 效果:
& & & &&这个是在activity切换时的一种动画方式的实现,可以用手触摸页面进行拖拽并实现页面跳转。
& & & &&如下效果:
& & & 思路及实现过程:
& & & &&有两种方法,各有优劣。
& & & &&先看第一种:
& & & &&思路:获取整个activity的contentView,然后在触摸事件中对它进行动画处理,简明快捷!但是有两个很不足的地方:
第一:你不能用布局中的子view来监听touch事件,原因很简单,动画触发后整个activity的view都在移动,监听这个事件本身的view也在移动,坐标采集数据就发生混乱了,动画各种抖动,我已经实践过了,大家可以自己去试一下。
第二,排除了子view监听touch事件后就只能重写onTouchEvent(MotionEvent event)方法了,让整个窗口来监听触摸事件,不干扰到activity中的各个控件。但是使用这个方法必须保证页面中的控件都没有拦截和消费触摸事件,否则事件传不到这里来。这样一来里面的控件处理onClick()等等就变得很麻烦,并且想要抽出一个工具类也变得很难很难了。所以除非你单纯想实现这个效果,否则不推荐这个思路。
& & & &&当然,这是我局限在自己的水平得出的结论,我也希望有大神指点指点,点出一条光明的路。因为下一种思路虽然弥补了上面两个不足,但是确实绕了个小圈子,也有瑕疵啊!
& & & &&第二种思路:既然直接操作activity的contentView不理想,那我就搞一个副本,我操作你的副本嘛,这样总可以吧。于是开始绕这个小圈子:获取contentView,获取它的bitmap,构造一个ImageView放入bitmap,用WindowManager添加这个ImageView,选定指定控件监听touch事件,使contentView不可见,对ImageView处理动画。。。是不是绕了一小圈?是不是有点麻烦?没办法,我当前只能想到这个办法处理这个问题,凑合还能用,再次恳求有大神看见帮忙指点迷津!多谢多谢!
思路大概就是这样,下面来看实现过程吧,基本就是代码了。
& & & &&建一个工具类,职责1:获取activity图像内容,放入bitmap。
* 获取activity图像内容的bitmap
public Bitmap getRootViewBitmap() {
rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content);
Log.d(TAG, &root = & + rootView + &
,width = & + rootView.getWidth() + &
,height = & + rootView.getHeight());
rootView.setDrawingCacheEnabled(true);
Bitmap rootViewBitmap = rootView.getDrawingCache();
return rootViewB
& & & &&职责2:创建ImageView,设置相关参数,添加到窗口上。
* 增加覆盖在上层、与页面内容一致的ImageView
private void addImage() {
rotateImageView = new ImageView(activity);
rotateImageView.setImageBitmap(rootBitmap);
rotateImageParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
rotateImageParams.format = PixelFormat.TRANSLUCENT;
//背景透明
rotateImageParams.width = rootView.getWidth();
rotateImageParams.height = rootView.getHeight();
rotateImageParams.verticalMargin = stationBarH
//距离顶部高度为一个状态栏的高度
rotateImageView.setRotation(0);
rotateImageView.setPivotX(rootView.getWidth() * 1f / 2f);
rotateImageView.setPivotY(rootView.getHeight() * 5f / 4f);
activity.getWindow().getWindowManager().addView(rotateImageView, rotateImageParams);
} & & & &职责3:处理touch事件。
& & & &&这个多说两句,touch事件处理,根据水平方向的move距离来计算旋转角度(0到90度),抬起手指后,根据检测当前角度来决定执行哪种动画。角度小,就旋转回原状态。角度大,则往外旋转直至消失,然后finish页面。
* 需要在相应activity中设置此触摸滑动监听,touch事件才会生效
public View.OnTouchListener onTouchListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchStartX = event.getX();
touchStartY = event.getY();
addImage();
new Thread(rootViewInvisibleDelay).start();
Log.i(TAG, &ACTION_DOWN
touchStartX = & + touchStartX + &
,touchStartY = & + touchStartY);
case MotionEvent.ACTION_MOVE:
touchMoveX = event.getX();
touchMoveY = event.getY();
Log.i(TAG, &ACTION_MOVE
touchStartX = & + touchStartX + &
,touchMoveX = & + touchMoveX + &
,touchStartY = & + touchStartY + &
,touchMoveY = & + touchMoveY);
float moveLength = touchMoveX - touchStartX;
if (!rotateOpen && moveLength & 10 && Math.abs(touchMoveY - touchStartY) & 50) {
rotateOpen =
if (rotateOpen) {
float rotateAngle = getRotateAngle(moveLength);
rotateImageView.setRotation(rotateAngle);
activity.getWindow().getWindowManager().updateViewLayout(rotateImageView, rotateImageParams);
case MotionEvent.ACTION_UP:
rotateOpen =
float finalRotate = rotateImageView.getRotation();
ValueAnimator valueA
Log.v(TAG, &ACTION_UP finalRotate = & + finalRotate);
if (finalRotate & 20) {
valueAnimator = ValueAnimator.ofFloat(finalRotate, 0);
rootView.setTag(resume);
//标志,恢复原状
valueAnimator = ValueAnimator.ofFloat(finalRotate, 90);
rootView.setTag(finish);
//标志,结束页面
valueAnimator.setDuration(300);
valueAnimator.addUpdateListener(animatorUpdateListener);
valueAnimator.addListener(animatorListener);
valueAnimator.start();
& & & &&两个动画的监听:
* 动画进行中,监听
ValueAnimator.AnimatorUpdateListener animatorUpdateListener = new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
float rotateAngle = (float) animation.getAnimatedValue();
rotateImageView.setRotation(rotateAngle);
activity.getWindow().getWindowManager().updateViewLayout(rotateImageView, rotateImageParams);
* 动画开始、取消、结束、重复监听
Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() {
public void onAnimationStart(Animator animation) {
public void onAnimationEnd(Animator animation) {
int tag = (int) rootView.getTag();
if (tag == resume) {
rootView.setVisibility(View.VISIBLE);
new Thread(removeImgDelay).start();
} else if (tag == finish) {
activity.finish();
public void onAnimationCancel(Animator animation) {
public void onAnimationRepeat(Animator animation) {
& & & &&然后使用这个类也是很简单,在activity里面,如下几行代码就设置完成了。有一点需要严重注意的是,一定不要在onCreate()方法里面构造对象,布局未初始化完成,啥尺寸也测不出来,就不会有效果的。可以在onWindowFocusChanged方法里执行。
private ActivityRotateAnimationUtil activityRotateAnimationU
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
activityRotateAnimationUtil = new ActivityRotateAnimationUtil(this);
bgImage.setOnTouchListener(activityRotateAnimationUtil.onTouchListener);
& & & &&然后,有一个问题就是,在动画开始和结束时,我们一边要加副本ImageView,一边要让源contentView消失不见,这个过程如果放在一起执行的话页面总是会闪一下,我的理解是副本还没加上去,原contentView的不可见就已经执行完了,即使把加副本的代码放在前面也不行,因为间隔时间太短,而加副本需要一定的时间。所以代码里这两个地方采用了两个步骤中间延时一段时间来处理,也就是那两个看起来挺多余的子线程存在的原因。我还在寻找更好解决办法。。。
& & & &&还有一个注意点,也很重要:使用这个工具,activity的主题需要设置android:theme=&@android:style/Theme.Translucent&,或者你有别的办法,让activity背景透明也行,否则的话,动画执行时,背景色会挡住下面的activity页面,常见的是一片黑,效果大打折扣。
& & & &&稍稍总结一下,实现这个效果其实难度并不大,重要的在细节。而且这个效果实现好了以后,顺推一下,什么平移呀,缩放呀,渐变呀,包括一些其他的属性其实都可以同理处理了,发挥的空间还是比较大的,就看想象力够不够,能不能设计出更绚烂的效果了。
& & & &&最后,贴上工具类的源码资源:
& & & &&欢迎拍砖,欢迎指点啊!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:43928次
排名:千里之外
原创:23篇
评论:34条
(1)(2)(2)(2)(1)(6)(1)(2)(5)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'> &>&&>&&>&正文
  在开发游戏的时候,有些 游戏是只能横屏玩的,所以手机竖立放置的时候,要保持游戏画面依然横屏。要做到这个要求其实很简单,在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。(landscape是横向,portrait是纵向)
  &?xml version="1.0" encoding="utf-8"?&
  &manifest xmlns:android=
  &&&&& package="com.ray.linkit"
  &&&&& android:versionCode="1"
  &&&&& android:versionName="1.0"&
  &&& &application android:icon="@drawable/icon" android:label="@string/app_name"&
  &&&&&&& &activity android:name=".Main"
  &&&&&&&&&&&&&&&&& android:label="@string/app_name"
  &&&&&&&&&&&&&&&&& android:screenOrientation="portrait"&
  &&&&&&&&&&& &intent-filter&
  &&&&&&&&&&&&&&& &action android:name="android.intent.action.MAIN" /&
  &&&&&&&&&&&&&&& &category android:name="android.intent.category.LAUNCHER" /&
  &&&&&&&&&&& &/intent-filter&
  &&&&&&& &/activity&
  &&&&&&&&&&&&&&& &activity android:name=".GamePlay"
  &&&&&&&&&&&&&&& android:screenOrientation="portrait"&&/activity&
  &&&&&&&&&&&&&&& &activity android:name=".OptionView"
  &&&&&&&&&&&&&&& android:screenOrientation="portrait"&&/activity&
  &&& &/application&
  &&& &uses-sdk android:minSdkVersion="3" /&
  &/manifest&
  另外,android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!
  可以给每个activity加上android:configChanges="keyboardHidden|orientation"属性,就不会重启activity.而是去调用onConfigurationChanged(Configuration newConfig). 这样就可以在这个方法里调整显示方式。
  比如:  if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
  &&& //横向  setContentView(R.layout.file_list_landscape);
  }else{
  &&& //竖向  setContentView(R.layout.file_list);
提示:支持键盘“← →”键翻页

我要回帖

更多关于 fragment跳转activity 的文章

 

随机推荐