这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、 以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员 快速开发自己的APP 已集成第三方开源组件: 网络请求库android-async-http 图片异步加载库universal-image-loader Sqlite数据库操作ormlite-android 社会化分享ShareSDK+短信验证码 Zxing二维码库 百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineoldandroids 表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、删除表等API 提示信息对话框工具类(ToolAlert.java),已集成泡泡、土司、对话框三种提示 文件操作工具类(ToolFile.java),assets/raw/xml/shrePerface/等文件读写API 地图定位工具类(ToolLocation.java),读取GPS状态、请求定位、获取经纬度等方法 社会化分享工具类(ToolShareSDK.java),各大开发平台分享API操作 短信验证码工具类(ToolMSM.java),移动/联通/电信三网发送手机短信验证码、异步回调验 证结果 字符串操作工具类(ToolString.java),生成UUID、非空非NULL逻辑判断、生成MD5等常用共 通方法 数据操作工具类(ToolData.java),自动递归获取表单数据封装成Map、本地数据分页共通方 法等 图片操作工具类(ToolPicture.java),生成二维码、验证码、灰度、合成、圆角、水印等操 作 读取本地资源工具类(ToolResource.java),反射本地资源文件API,避免依赖R文件,方便 jar形式发布 Android单位转换工具类(ToolUnit.java),sp/dp/px互转 自定义Toast工具类(ToolToast.java),自定义背景色、字体颜色、大小、边框等 Properties操作工具类(ToolProperties.java),读写Properties文件操作 网络操作工具类(ToolNetwork.java),获取网络信息、更改切换网络等相关操作 日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/XMLPullPaser模式解析、生成XML操作 XMPP操作工具类(ToolXMPP.java),基于XMPP协议的相关API操作 适配字体工具类(ToolAutoFit.java),代码根据设备密度自动缩放View的字体大小 LOG相关工具类(ToolLog.java) 功能待续-->切入记录异常日志,并存储文件或上传至服务 器 已封装/收集自定义控件: 兼容低版本的SwitchButton 追加自定义属性Value的CheckBox/RadioButton/RadioGroup/SingleSpinner 圆角提示信息TipsView 圆角图片RoundImageView 自定义样式风格ProgressDialog 自定义样式WebView 圆形进度条(RoundProgressBar)、垂直进度条(VerticalProgressBar) 开源优秀自定义控件:imageindicator(图片轮播/引导界面)、pulltorefresh、XListView 、TableFixHeaders(水平+垂直滚动+首行+首列冻结表格)、ViewPager
下载地址:http://www.devstore.cn/code/info/893.html
运行截图:
源码片段
package com.tvt.family.cloudvideo; import java.lang.reflect.Method; import java.util.ArrayList; import com.tvt.family.cloudvideo.adapter.TvtEventInfo; import com.tvt.family.cloudvideo.adapter.TvtEventsData; import com.tvt.family.cloudvideo.adapter.TvtEventsData.OnNewEventListener; import com.tvt.family.cloudvideo.app.TvtApplication; import com.tvt.family.cloudvideo.app.TvtParam; import com.tvt.family.cloudvideo.app.TvtShutdownReceiver; import com.tvt.family.cloudvideo.network.MSbase; import com.tvt.family.cloudvideo.network.javabean.ResponseMSGetDevice; import com.tvt.family.cloudvideo.push.TvtNotificationReceiver; import com.tvt.family.cloudvideo.push.TvtPushMessageReceiver; import com.tvt.family.cloudvideo.thread.MessageObj; import com.tvt.family.cloudvideo.util.ErrorMessage; import com.tvt.family.cloudvideo.util.PubDefine; import com.tvt.family.cloudvideo.view.TvtBaseFragment; import com.tvt.family.cloudvideo.view.TvtCameraFragment; import com.tvt.family.cloudvideo.view.TvtEventFragment; import com.tvt.family.cloudvideo.view.TvtIconView; import com.tvt.family.cloudvideo.view.TvtSettingFragment; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; public class TvtMainActivity extends TvtBaseActivity implements OnNewEventListener { private TvtCameraFragment mCameraFragment; private TvtEventFragment mEventFragment; private TvtSettingFragment mSettinyFragment; private TvtBaseFragment mCurrentFragment; private LinearLayout mCameraIconView; private LinearLayout mEventIconView; private RelativeLayout mMoreIconView; private TvtIconView iconView; private ImageView mAppUpdateTip; private Button mTitleAddButton; private TextView mTitleTextView; private int mPreSelectId = 0; private TvtShutdownReceiver mShouShutdownReceiver; private AvosPushReceiver mAvosPushReceiver; private TextView mTitleClearView; private TextView mFootDeleteAllView; private TextView mFootDeleteView; private LinearLayout mFootTabLayout; private LinearLayout mFootDeleteLayout; private boolean mIsClear = true; private boolean mSelectAllEvent = false; private AlertDialog mAlertDialog; public OnClickListener mIconClickListener = new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub int id = view.getId(); if(id == R.id.mainfooter_camera) { replaceFragment(mCameraFragment); mTitleClearView.setVisibility(View.GONE); setTitleText(getResources().getString(R.string.Main_footer_camera)); mTitleAddButton.setVisibility(View.VISIBLE); ImageView imageview = (ImageView)findViewById(R.id.mainfooter_camera_imageview); imageview.setImageResource(R.drawable.tab_camera_select); TextView text = (TextView)findViewById(R.id.mainfooter_camera_textview); text.setTextColor(getResources().getColor(R.color.foot_text_color)); resumePreState(id); } else if(id == R.id.mainfooter_event) { replaceFragment(mEventFragment); mTitleClearView.setVisibility(View.VISIBLE); setTitleText(getResources().getString(R.string.Main_footer_event)); mTitleAddButton.setVisibility(View.GONE); TvtIconView imageview = (TvtIconView)findViewById(R.id.mainfooter_event_imageview); imageview.setImageResource(R.drawable.tab_events_select); // TvtEventsData.getInstance(TvtMainActivity.this).clearNewDataCounts(); // imageview.setIconTipVisual(false); TextView text = (TextView)findViewById(R.id.mainfooter_event_textview); text.setTextColor(getResources().getColor(R.color.foot_text_color)); resumePreState(id); } else if(id == R.id.mainfooter_setting) { replaceFragment(mSettinyFragment); mTitleClearView.setVisibility(View.GONE); setTitleText(getResources().getString(R.string.Main_footer_more)); mTitleAddButton.setVisibility(View.GONE); ImageView imageview = (ImageView)findViewById(R.id.mainfooter_more_imageview); imageview.setImageResource(R.drawable.tab_more_select); TextView text = (TextView)findViewById(R.id.mainfooter_more_textview); text.setTextColor(getResources().getColor(R.color.foot_text_color)); resumePreState(id); } } }; public OnClickListener mClickListener = new OnClickListener() { @Override public void onClick(View view) { int id = view.getId(); switch (id) { case R.id.titleBar_title_clear: if(mIsClear) { if(mPreSelectId == R.id.mainfooter_event) { mTitleClearView.setText(getResources().getString(R.string.Main_title_cancel)); mFootTabLayout.setVisibility(View.INVISIBLE); mFootDeleteLayout.setVisibility(View.VISIBLE); mIsClear = false; mEventFragment.selectEvent(true); } } else { if(mPreSelectId == R.id.mainfooter_event) { mTitleClearView.setText(getResources().getString(R.string.Main_title_clear)); mFootTabLayout.setVisibility(View.VISIBLE); mFootDeleteLayout.setVisibility(View.INVISIBLE); mIsClear = true; mEventFragment.selectEvent(false); } } mFootDeleteAllView.setText(R.string.Main_footer_delete_all); mSelectAllEvent = false; break; case R.id.mainfooter_more_delete_all: if(mPreSelectId == R.id.mainfooter_event) { mEventFragment.selectEventAll(!mSelectAllEvent); if(!mSelectAllEvent) { mFootDeleteAllView.setText(R.string.Main_footer_undelete_all); mSelectAllEvent =true; } else { mFootDeleteAllView.setText(R.string.Main_footer_delete_all); mSelectAllEvent = false; } } break; case R.id.mainfooter_more_delete: if(mPreSelectId == R.id.mainfooter_event) { Resources res = getResources(); // ((TextView)mAlertDialog.getWindow().findViewById(R.id.alter_dialog_title)).setText(res.getString(R.string.Tip_title)); if(mEventFragment.hasEventSelected()) { mAlertDialog = new AlertDialog.Builder(TvtMainActivity.this).create(); mAlertDialog.show(); mAlertDialog.setContentView(R.layout.alter_dialog_view); ((TextView)mAlertDialog.getWindow().findViewById(R.id.alter_dialog_message)).setText(res.getString(R.string.Tip_delete_select_events)); mAlertDialog.getWindow().findViewById(R.id.alter_dialog_btn_sure).setOnClickListener(new OnClickListener(){ @Override public void onClick(View view) { mAlertDialog.dismiss(); mEventFragment.deleteEvent(); mTitleTextView.setVisibility(View.VISIBLE); mTitleClearView.setText(getResources().getString(R.string.Main_title_clear)); mIsClear = true; mFootTabLayout.setVisibility(View.VISIBLE); mFootDeleteLayout.setVisibility(View.INVISIBLE); mEventFragment.selectEvent(false); } }); mAlertDialog.getWindow().findViewById(R.id.alter_dialog_btn_cancel).setOnClickListener(new OnClickListener(){ @Override public void onClick(View view) { mAlertDialog.dismiss(); } }); } else { ErrorMessage.showToast(getApplicationContext(), R.string.Tip_select_event_deleting); } } break; default: break; } } }; @SuppressLint("HandlerLeak") private Handler mainHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case PubDefine.MSG_MS_LOGIN: if ((String) msg.obj != null) { int retCode = MSbase.msNormalResponse((String) msg.obj).getCode(); switch (retCode) { case PubDefine.MSG_SUCCESS_DONE: break; default: logOut(); break; } } else { logOut(); } break; case PubDefine.MSG_MS_GET_DEVICE: if (msg.obj != null) { ResponseMSGetDevice response = MSbase.msGetDeviceResponse((String) msg.obj); if (response == null) return; switch (response.getCode()) { case PubDefine.MSG_SUCCESS_DONE: if(msg.getData() != null) { String deviceSn = msg.getData().getString("DeviceSn"); if(deviceSn == null) return ; int i = 0; for(i = 0; i<response.getdata().getdevice_array().size(); i++)="" {="" if(devicesn.equals(response.getdata().getdevice_array().get(i).getdevice_sn()))="" string="" tipstring="getString(R.string.device_add_other)" +="" response.getdata().getdevice_array().get(i).getdevice_name();="" errormessage.showtoast(tvtmainactivity.this,="" tipstring);="" break;="" }="" if(i="">= response.getData().getDevice_array().size()) { String nameString = msg.getData().getString("DeviceName"); String tipString = getString(R.string.device_delete_other) + nameString; ErrorMessage.showToast(TvtMainActivity.this, tipString); } } break; default: break; } } default: break; } super.handleMessage(msg); } }; public void changeSelectAllEvent(boolean select) { if(select != mSelectAllEvent) { mSelectAllEvent = select; if(mSelectAllEvent) { mFootDeleteAllView.setText(R.string.Main_footer_undelete_all); } else { mFootDeleteAllView.setText(R.string.Main_footer_delete_all); } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mCameraFragment = new TvtCameraFragment(); mEventFragment = new TvtEventFragment(); mSettinyFragment = new TvtSettingFragment(); mTitleTextView = (TextView)findViewById(R.id.titleBar_title); mTitleAddButton = (Button)findViewById(R.id.titleBar_add); mTitleClearView = (TextView)findViewById(R.id.titleBar_title_clear); mFootDeleteAllView = (TextView)findViewById(R.id.mainfooter_more_delete_all); mFootDeleteView = (TextView)findViewById(R.id.mainfooter_more_delete); mFootTabLayout = (LinearLayout)findViewById(R.id.mainfooter_tab_line); mFootDeleteLayout = (LinearLayout)findViewById(R.id.mainfooter_more_delete_line); mCameraIconView = (LinearLayout)findViewById(R.id.mainfooter_camera); mEventIconView = (LinearLayout)findViewById(R.id.mainfooter_event); mMoreIconView = (RelativeLayout)findViewById(R.id.mainfooter_setting); mCameraIconView.setOnClickListener(mIconClickListener); mEventIconView.setOnClickListener(mIconClickListener); mMoreIconView.setOnClickListener(mIconClickListener); mTitleClearView.setOnClickListener(mClickListener); mFootDeleteAllView.setOnClickListener(mClickListener); mFootDeleteView.setOnClickListener(mClickListener); iconView = (TvtIconView)findViewById(R.id.mainfooter_event_imageview); mAppUpdateTip = (ImageView)findViewById(R.id.mainfooter_more_update_tip); mTitleAddButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(TvtMainActivity.this, TvtZxingActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivityForResult(intent, 10); overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left); } }); TvtEventsData.getInstance(this).setNewEventListener(this); mPreSelectId = R.id.mainfooter_camera; mIconClickListener.onClick(mCameraIconView); refreshEvent(); setMoreUpdateVisuable(TvtApplication.getInstance().getAppUpdate()); mShouShutdownReceiver = new TvtShutdownReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.ACTION_SHUTDOWN"); registerReceiver(mShouShutdownReceiver, filter); mAvosPushReceiver = new AvosPushReceiver(); IntentFilter filter2 = new IntentFilter(); filter2.addAction(TvtPushMessageReceiver.AVOS_PUSH_DEVICE_DELETE); filter2.addAction(TvtPushMessageReceiver.AVOS_PUSH_PASSWORD_MODIFY); filter2.addAction(TvtPushMessageReceiver.AVOS_PUSH_PASSWORD_NEW); registerReceiver(mAvosPushReceiver, filter2); } private void logOut() { (TvtParam.getInstance(getApplicationContext())).setSavedPassword(""); sendCleanCameraMessage(); TvtCameraFragment.mCameraInfos.clear(); TvtParam.getInstance(TvtMainActivity.this).getSharedperferenceHelper().setString(PubDefine.SAVED_DEVICE_SNS, ""); (TvtParam.getInstance(getApplicationContext())).unSubscribe((TvtParam.getInstance(getApplicationContext())).getSavedAccount()); sendLogOutMessage(); ErrorMessage.showToast(getApplicationContext(), R.string.password_modify_other); startActivity(new Intent(getApplicationContext(),TvtLoginActivity.class)); finish(); NotificationManager notiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notiManager.cancel(TvtPushMessageReceiver.EVENT_NOTIFY_ID_STRING); try { Object statusBarManager = getSystemService("statusbar"); Method collapse; if (Build.VERSION.SDK_INT <= 16) { collapse = statusBarManager.getClass().getMethod("collapse"); } else { collapse = statusBarManager.getClass().getMethod("collapsePanels"); } collapse.invoke(statusBarManager); } catch (Exception localException) { localException.printStackTrace(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == 10) { mCameraFragment.sendGetDeviceMessage(TvtParam.getInstance(getApplication()).getSavedAccount()); } } @Override protected void onResume() { if(TvtNotificationReceiver.mIsNotification) { mIconClickListener.onClick(mEventIconView); TvtNotificationReceiver.mIsNotification = false; } mCameraFragment.sendGetDeviceMessage(TvtParam.getInstance(getApplication()).getSavedAccount()); super.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { // super.onSaveInstanceState(outState); } public void setTitleClear(int visuable) { if(mPreSelectId == R.id.mainfooter_event) mTitleClearView.setVisibility(visuable); } @Override public void onBackPressed() { if(!mIsClear) { mTitleClearView.setText(getResources().getString(R.string.Main_title_clear)); mFootTabLayout.setVisibility(View.VISIBLE); mFootDeleteLayout.setVisibility(View.INVISIBLE); mIsClear = true; mEventFragment.selectEvent(false); mFootDeleteAllView.setText(R.string.Main_footer_delete_all); mSelectAllEvent = false; } else { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); TvtEventsData.getInstance(this).setNewEventListener(null); // TvtParam.getInstance(this).getSharedperferenceHelper() // .setInt(PubDefine.SAVED_EVENT_COUNT + TvtParam.getInstance(this).getSavedAccount() // ,TvtEventsData.getInstance(this).getNewDataCounts()); unregisterReceiver(mShouShutdownReceiver); unregisterReceiver(mAvosPushReceiver); } public void setMoreUpdateVisuable(boolean visuable) { if(visuable) mAppUpdateTip.setVisibility(View.VISIBLE); else mAppUpdateTip.setVisibility(View.INVISIBLE); } public void setTitleText(String text) { mTitleTextView.setText(text); } public void resumePreState(int selectId) { ImageView imageview; TextView text; if(mPreSelectId != selectId) { switch (mPreSelectId) { case R.id.mainfooter_camera: imageview = (ImageView)findViewById(R.id.mainfooter_camera_imageview); imageview.setImageResource(R.drawable.tab_camera_normal); text = (TextView)findViewById(R.id.mainfooter_camera_textview); text.setTextColor(getResources().getColor(R.color.tab_text_normal_color)); break; case R.id.mainfooter_event: TvtIconView view = (TvtIconView)findViewById(R.id.mainfooter_event_imageview); view.setImageResource(R.drawable.tab_events_normal); text = (TextView)findViewById(R.id.mainfooter_event_textview); text.setTextColor(getResources().getColor(R.color.tab_text_normal_color)); break; case R.id.mainfooter_setting: imageview = (ImageView)findViewById(R.id.mainfooter_more_imageview); imageview.setImageResource(R.drawable.tab_more_normal); text = (TextView)findViewById(R.id.mainfooter_more_textview); text.setTextColor(getResources().getColor(R.color.tab_text_normal_color)); break; default: break; } mPreSelectId = selectId; } } private void replaceFragment(TvtBaseFragment fragment) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); if(mCurrentFragment == null) mCurrentFragment = fragment; if(mCurrentFragment != null) fragmentTransaction.hide(mCurrentFragment); if(fragment.isAdded()) { fragmentTransaction.show(fragment); fragment.OnRefreshData(); mCurrentFragment = fragment; } else { fragmentTransaction.add(R.id.main_fragment, fragment).show(fragment); fragment.OnRefreshData(); mCurrentFragment = fragment; } fragmentTransaction.commit(); } @Override public void refreshEvent() { // TODO Auto-generated method stub int unReadCount = 0; ArrayList<tvteventinfo> eventsList = TvtEventsData.getInstance(this).getEventsList(); for(int i = 0; i < eventsList.size(); i++) { if(eventsList.get(i).getFlag() == 0) { unReadCount++; } } if(unReadCount == eventsList.size()) { changeSelectAllEvent(false); }else { } if(unReadCount <= 0) { iconView.setIconTipVisual(false); return ; } if(unReadCount > 99){ iconView.setTextTipBackground(R.drawable.event_tip2); iconView.setText("99+"); } else { iconView.setTextTipBackground(R.drawable.event_tip1); iconView.setText("" + unReadCount); } iconView.setIconTipVisual(true); if(mEventFragment != null) { mEventFragment.refreshEventData(); } } protected void sendLoginMessage(String account, String password) { Message message = new Message(); message.what = PubDefine.MSG_MS_LOGIN; message.obj = new MessageObj(mainHandler, MSbase.msLoginString(account, password)); TvtParam.getInstance(getApplicationContext()).getHttpsHandler().sendMessage(message); } private void sendCleanCameraMessage() { Message message = new Message(); message.what = PubDefine.MSG_LS_DELETE_ALL_DEVICE; message.obj = new MessageObj(mainHandler, PubDefine.LS_SERVER_URL_DEV_CLEAN, ""); (TvtParam.getInstance(getApplicationContext())).getLocalHttpHandler().sendMessage(message); } private void sendLogOutMessage() { Message message = new Message(); message.what = PubDefine.MSG_MS_LOGOUT; message.obj = new MessageObj(mainHandler, MSbase.msLogoutString(TvtParam.getInstance(getApplicationContext()).getSavedAccount())); (TvtParam.getInstance(getApplication())).getHttpsHandler().sendMessage(message); } public class AvosPushReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(TvtPushMessageReceiver.AVOS_PUSH_DEVICE_DELETE)) { Message message = new Message(); message.what = PubDefine.MSG_MS_GET_DEVICE; Bundle bundle = new Bundle(); String deviceSnString = intent.getStringExtra("DeviceSn"); String deviceNameString = ""; for(int i = 0 ;i<tvtcamerafragment.mcamerainfos.size();i++) {="" if(devicesnstring.equals(tvtcamerafragment.mcamerainfos.get(i).getdevicesn()))="" devicenamestring="TvtCameraFragment.mCameraInfos.get(i).getCameraName();" break;="" }="" bundle.putstring("devicesn",="" devicesnstring);="" bundle.putstring("devicename",="" devicenamestring);="" message.setdata(bundle);="" message.obj="new" messageobj(mainhandler,="" msbase.msgetdevicestring(="" tvtparam.getinstance(getapplication()).getsavedaccount()));="" tvtparam.getinstance(getapplicationcontext()).gethttpshandler().sendmessage(message);="" if(mcamerafragment="" !="null)" mcamerafragment.sendgetdevicemessage(tvtparam.getinstance(getapplication()).getsavedaccount());="" else="" if(action.equals(tvtpushmessagereceiver.avos_push_password_modify))="" string="" accountstring="TvtParam.getInstance(getApplicationContext()).getSavedAccount();" passwordstring="TvtParam.getInstance(getApplicationContext()).getSavedPassword();" sendloginmessage(accountstring,passwordstring);="" if(action.equals(tvtpushmessagereceiver.avos_push_password_new))="" if(!misclear)="" changeselectallevent(false);="" <="" pre=""> </tvtcamerafragment.mcamerainfos.size();i++)></tvteventinfo></response.getdata().getdevice_array().size();>