当前位置: 编程技术>移动开发
本页文章导读:
▪之后把博客写这里吧 以后把博客写这里吧
以前的百度博客暂时不写了,也懒得转了,就写这里好了,欢迎交流
......
▪ 批改Launcher源码之快速启动 修改Launcher源码之快速启动
最近在写一个快速拨号的App,应用很简单,主要要突出一个快速的特点,启动要快,最好能从Home
Screen启动,当然第一个反应是在桌面上新建一个快捷方式,不.........
▪ 传智播客-3G开发之平添多Activity和数据传递,Activity生命周期,广播,服务 传智播客--3G开发之添加多Activity和数据传递,Activity生命周期,广播,服务
转载:http://blog.csdn.net/getclass/archive/2010/03/05/5350740.aspx==================================================================================1..........
[1]之后把博客写这里吧
来源: 互联网 发布时间: 2014-02-18
以后把博客写这里吧
以前的百度博客暂时不写了,也懒得转了,就写这里好了,欢迎交流
以前的百度博客暂时不写了,也懒得转了,就写这里好了,欢迎交流
[2] 批改Launcher源码之快速启动
来源: 互联网 发布时间: 2014-02-18
修改Launcher源码之快速启动
最近在写一个快速拨号的App,应用很简单,主要要突出一个快速的特点,启动要快,最好能从Home Screen启动,当然第一个反应是在桌面上新建一个快捷方式,不过我决定用另一种特别的方式,即:当用户在Home Screen中上下触屏时,启动此应用,左右触屏是切换桌面的。废话不多说,看怎样实现:
1、编译运行Launcher源码,具体可参照网上相关介绍,本来打算附上修改后的源码,不过文件太大,需要的话可以找我,建议参考网络资料自己动手编译。
2、修改Launcher源码,只要改一处,修改Workspace类的onInterceptTouchEvent方法
public boolean onInterceptTouchEvent(MotionEvent ev) { /*****************省略相关代码***********/ final float x = ev.getX(); final float y = ev.getY(); Log.d("Workspace", "enter onInterceptTouchEvent"); switch (action) { case MotionEvent.ACTION_MOVE: /* * mIsBeingDragged == false, otherwise the shortcut would have caught it. * Check * whether the user has moved far enough from his original down touch. */ /* * Locally do absolute value. mLastMotionX is set to the y value * of the down event. */ final int xDiff = (int) Math.abs(x - mLastMotionX); final int yDiff = (int) Math.abs(y - mLastMotionY); final int touchSlop = mTouchSlop; boolean xMoved = xDiff > touchSlop; boolean yMoved = yDiff > touchSlop; if (xMoved || yMoved) { if (xMoved) { // Scroll if the user moved far enough along the X axis mTouchState = TOUCH_STATE_SCROLLING; enableChildrenCache(); } /*********************************添加的代码****************************************/ if(yMoved) { //纵向移动 Log.d("workspace", "在这启动你的应用程序!"); Intent intent = new Intent(); //设置应用的包名,类名 intent.setClassName("com.tek.qd", "com.tek.qd.QuickDialer"); //启动应用 mContext.startActivity(intent); mTouchState = TOUCH_STATE_SCROLLING; enableChildrenCache(); } /*********************************代码结束****************************************/ // Either way, cancel any pending longpress if (mAllowLongPress) { mAllowLongPress = false; // Try canceling the long press. It could also have been scheduled // by a distant descendant, so use the mAllowLongPress flag to //block // everything final View currentScreen = getChildAt(mCurrentScreen); currentScreen.cancelLongPress(); } } break; case MotionEvent.ACTION_DOWN: // Remember location of down touch mLastMotionX = x; mLastMotionY = y; mAllowLongPress = true; /* * If being flinged and user touches the screen, initiate drag; * otherwise don't. mScroller.isFinished should be false when * being flinged. */ mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: if (mTouchState != TOUCH_STATE_SCROLLING) { final CellLayout currentScreen = (CellLayout) getChildAt( mCurrentScreen); if (!currentScreen.lastDownOnOccupiedCell()) { getLocationOnScreen(mTempCell); // Send a tap to the wallpaper if the last down was on //empty space mWallpaperManager.sendWallpaperCommand(getWindowToken(), "android.wallpaper.tap", mTempCell[0] + (int) ev.getX(), mTempCell[1] + (int) ev.getY(), 0, null); } } // Release the drag clearChildrenCache(); mTouchState = TOUCH_STATE_REST; mAllowLongPress = false; break; } /* * The only time we want to intercept motion events is if we are in the * drag mode. */ return mTouchState != TOUCH_STATE_REST; }
Workspace相当于你看到的一个桌面,触屏事件在到达onTouchEvent之前会先执行onInterceptTouchEvent方法。
如果你想通过在桌面空白处用触屏事件来启动你的应用的话,可以用此方法,不过用户不一定接受你的定制Launcher。
1 楼
yelinsen05
2011-04-13
开发环境是哪个版本的!如果做平台的话!可以改Default APP!以及Framework其实实现方式其实有很多!这个快速启动!我想强调的重点在于快速拨号在读取联系人信息大数据量的时候做优化!
2 楼
Lucky_Man
2011-04-13
谢谢楼上的评论,我改的是Android 2.1,联系人信息数据量一般不会太大吧,上面的文章只是介绍如何快速启动一个程序
[3] 传智播客-3G开发之平添多Activity和数据传递,Activity生命周期,广播,服务
来源: 互联网 发布时间: 2014-02-18
传智播客--3G开发之添加多Activity和数据传递,Activity生命周期,广播,服务
转载:http://blog.csdn.net/getclass/archive/2010/03/05/5350740.aspx
==================================================================================
1.添加新的Activity
1) 新建一个继承Activity的类
2)在AndroidManifest.xml文件中添加:<activity android:name=".NewActivity" android:label="新activity的页面标题"/>
总结:
--android:name属性值的前面加了一个点 表示NewActivity是当前包cn.itcast.action下的类
2.打开新的Activity
1) 不传递参数:startActivity(new Intent(MainActivity.this, NewActivity.class));
2) 传递参数:
Intent intent = new Intent(MainActivity.this, NewActivity.class)
携带数据:Bundle bundle = new Bundle();
设置具体数 据:bundle.putString("name", "传智播客");
将数据添加到意图 中:intent.putExtras(bundle);
将意图通知操作系统:startActivity(intent);
3)接 收参数:
得到激活当前意图的意图:Bundle bundle = this.getIntent().getExtras();
String name = bundle.getString("name");
4)得到新打开Activity关闭后返回的数据
在调用端的 Activity:
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
重写onActivityResult(int requestCode, int resultCode, Intent data)方法
在被调用端的Activity:
数据是使用Intent返 回:Intent intent = new Intent();
返回数据存入 Intent:intent.putExtra(“result”, “传智播客的学生很可爱”);
设置返回数 据:NewActivity.this.setResult(RESULT_OK, intent);
关闭 Activity:NewActivity.this.finish();
总结:
--显式意图:第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
-- 最后不要忘记将意图通知操作系统
--Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值
--传 递参数时可以不用Bundle类.intent.putExtras("name","传智播客");
--请求码:区分那个Activity的 哪个按钮的请求.
--结果码:区分是哪个Activity返回的结果.
3.Intent(意图)
总 结:
--Intent提供了一种通用的消息系统,为了减少耦合.
--Intent可以激活Android应用的三个核心组件:活动、 服务和广播接收器。
--Intent分成显式意图和隐式意图
--显式意图:明确指定Intent传递给哪个组件
--隐式意 图:Android系统根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处 理这个意图。
4.Activity 生命周期
1)Activity三个状态:
运行状态:当前可以使用的Activity
暂停状态:能看到的Activity,但失去焦点.
停止状态:看不到的Activity,被别的Activity覆盖了.
2)Activity 中的7种方法:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
3)Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。
4)Activity 的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。
5)Activity的前台生命周期自 onResume()调用起,至相应的onPause()调用为止。
5.照相机的操作
总 结:
--照相机一定要记得,在不用的时候要释放.
6.广播接收者
1)继承BroadcastReceiver,并重写onReceive() 方法。
public class IncomingSMSReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
}
}
2)订阅感兴趣的广播Intent,订阅方法有两种:
-使用代码进行订阅
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);
-在AndroidManifest.xml文件中的<application>节点里进行订阅:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
3)接收电池电量变化广播Intent
-<action android:name="android.intent.action.BATTERY_CHANGED"/>
4)接收 开机启动广播Intent
-<action android:name="android.intent.action.BOOT_COMPLETED"/>
总结:
--广播接收者是用在异步接收广 播意图的.
--就是一个意图,可以被多地方接收.
--可以利用广播接收者监听短信
--当系统收到短信时,会发出一个action 名称为android.provider.Telephony.SMS_RECEIVED的广播Intent,该Intent存放了接收到的短信内容,使 用名称“pdus”即可从Intent中获取短信内容。
--通常一个BroadcastReceiver对象的生命周期不超过5秒
7.服务
1)继承 Service类:public class SMSService extends Service { }
2)在 AndroidManifest.xml文件中的<application>节点里对服务进行配置:
<service android:name=".SMSService" />
总结:
--服务一般没有用户操作界面,它运行于系统中不容易被用户发觉
--服务不能自己运行
转载:http://blog.csdn.net/getclass/archive/2010/03/05/5350740.aspx
==================================================================================
1.添加新的Activity
1) 新建一个继承Activity的类
2)在AndroidManifest.xml文件中添加:<activity android:name=".NewActivity" android:label="新activity的页面标题"/>
总结:
--android:name属性值的前面加了一个点 表示NewActivity是当前包cn.itcast.action下的类
2.打开新的Activity
1) 不传递参数:startActivity(new Intent(MainActivity.this, NewActivity.class));
2) 传递参数:
Intent intent = new Intent(MainActivity.this, NewActivity.class)
携带数据:Bundle bundle = new Bundle();
设置具体数 据:bundle.putString("name", "传智播客");
将数据添加到意图 中:intent.putExtras(bundle);
将意图通知操作系统:startActivity(intent);
3)接 收参数:
得到激活当前意图的意图:Bundle bundle = this.getIntent().getExtras();
String name = bundle.getString("name");
4)得到新打开Activity关闭后返回的数据
在调用端的 Activity:
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
重写onActivityResult(int requestCode, int resultCode, Intent data)方法
在被调用端的Activity:
数据是使用Intent返 回:Intent intent = new Intent();
返回数据存入 Intent:intent.putExtra(“result”, “传智播客的学生很可爱”);
设置返回数 据:NewActivity.this.setResult(RESULT_OK, intent);
关闭 Activity:NewActivity.this.finish();
总结:
--显式意图:第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
-- 最后不要忘记将意图通知操作系统
--Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值
--传 递参数时可以不用Bundle类.intent.putExtras("name","传智播客");
--请求码:区分那个Activity的 哪个按钮的请求.
--结果码:区分是哪个Activity返回的结果.
3.Intent(意图)
总 结:
--Intent提供了一种通用的消息系统,为了减少耦合.
--Intent可以激活Android应用的三个核心组件:活动、 服务和广播接收器。
--Intent分成显式意图和隐式意图
--显式意图:明确指定Intent传递给哪个组件
--隐式意 图:Android系统根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处 理这个意图。
4.Activity 生命周期
1)Activity三个状态:
运行状态:当前可以使用的Activity
暂停状态:能看到的Activity,但失去焦点.
停止状态:看不到的Activity,被别的Activity覆盖了.
2)Activity 中的7种方法:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
3)Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。
4)Activity 的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。
5)Activity的前台生命周期自 onResume()调用起,至相应的onPause()调用为止。
5.照相机的操作
总 结:
--照相机一定要记得,在不用的时候要释放.
6.广播接收者
1)继承BroadcastReceiver,并重写onReceive() 方法。
public class IncomingSMSReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
}
}
2)订阅感兴趣的广播Intent,订阅方法有两种:
-使用代码进行订阅
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);
-在AndroidManifest.xml文件中的<application>节点里进行订阅:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
3)接收电池电量变化广播Intent
-<action android:name="android.intent.action.BATTERY_CHANGED"/>
4)接收 开机启动广播Intent
-<action android:name="android.intent.action.BOOT_COMPLETED"/>
总结:
--广播接收者是用在异步接收广 播意图的.
--就是一个意图,可以被多地方接收.
--可以利用广播接收者监听短信
--当系统收到短信时,会发出一个action 名称为android.provider.Telephony.SMS_RECEIVED的广播Intent,该Intent存放了接收到的短信内容,使 用名称“pdus”即可从Intent中获取短信内容。
--通常一个BroadcastReceiver对象的生命周期不超过5秒
7.服务
1)继承 Service类:public class SMSService extends Service { }
2)在 AndroidManifest.xml文件中的<application>节点里对服务进行配置:
<service android:name=".SMSService" />
总结:
--服务一般没有用户操作界面,它运行于系统中不容易被用户发觉
--服务不能自己运行
最新技术文章: