android 开发中会遇到的问题(一)

来源:互联网 发布:淘宝客服需要会哪些 编辑:程序博客网 时间:2024/05/29 07:06
作者:朱强 
博客:http://blog.csdn.net/zhuqiang1002
邮箱:zhuqiang5138@126.com 

1、android Activity跳转黑屏、白屏或闪屏

原因分析

这是因为我们在styles文件里给Activity添加里跳转动画,而有些手机判断这个的时候会出问题,导致黑屏、白屏或闪屏。

解决方案

styles文件里动画置null

<style name="Theme" parent="android:Theme">     <item name="android:windowBackground">@android:color/transparent</item>     <item name="android:windowIsTranslucent">true</item></style><style name="Animation">     <item name="android:activityOpenEnterAnimation">@null</item>     <item name="android:activityOpenExitAnimation">@null</item>     <item name="android:activityCloseEnterAnimation">@null</item>     <item name="android:activityCloseExitAnimation">@null</item>     <item name="android:taskOpenEnterAnimation">@null</item>     <item name="android:taskOpenExitAnimation">@null</item>     <item name="android:taskCloseEnterAnimation">@null</item>     <item name="android:taskCloseExitAnimation">@null</item>     <item name="android:taskToFrontEnterAnimation">@null</item>     <item name="android:taskToFrontExitAnimation">@null</item>     <item name="android:taskToBackEnterAnimation">@null</item>     <item name="android:taskToBackExitAnimation">@null</item></style>

然后在AndroidManifest文件的activity添加主题android:theme="@style/Theme"。

参考链接

http://blog.csdn.net/menglele1314/article/details/45841073

2、android 集成支付宝移动支付SDK,在未安装支付宝钱包的情况下,报错4000

原因分析

支付宝sdk,肯定是有判断是否安装了支付宝钱包逻辑的,如果未安装支付宝钱包,需要跳转到网页版支付页面

解决方案

在AndroidManifest.xml 文件中配置如下代码:

<!-- 支付宝支付 Web版本 --><activity    android:name="com.alipay.sdk.app.H5PayActivity"    android:configChanges="orientation|keyboardHidden|navigation"    android:exported="false"    android:screenOrientation="behind"    android:windowSoftInputMode="adjustResize|stateHidden" ></activity><activity    android:name="com.alipay.sdk.auth.AuthActivity"    android:configChanges="orientation|keyboardHidden|navigation"    android:exported="false"    android:screenOrientation="behind" ></activity>

3、android 如何直接使用系统自带浏览器下载文件

原因分析

简单的apk升级功能,若有新版本,跳转浏览器下载即可,但是往往手机上安装了多款浏览器,会跳出选择浏览器界面,如果默认就只用系统自带的浏览器呢 就不会弹出选择界面

解决方案

Intent intent = new Intent();        intent.setAction("android.intent.action.VIEW");    Uri content_url = Uri.parse("http://www.baidu.com");   intent.setData(content_url);           intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");startActivity(intent);

4、android H5使用GPS定位

原因分析

当然是没有编写对应的代码喽

解决方案

设置 WebSettings 和 WebChromeClient

webSettings.setDatabaseEnabled(true);String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();// 启用地理定位webSettings.setGeolocationEnabled(true);// 设置定位的数据库路径webSettings.setGeolocationDatabasePath(dir);// 最重要的方法,一定要设置,这就是出不来的主要原因webSettings.setDomStorageEnabled(true);

// 配置权限private class MyWebChromeClient extends WebChromeClient{@Overridepublic void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback){callback.invoke(origin, true, false);super.onGeolocationPermissionsShowPrompt(origin, callback);}}

5、android 为啥PopupWindow中的ListView的item点击没有效果

原因分析

当前PopupWindow没有获取到焦点

解决方案

设置 setFocuable(true)

当然如果设置了这个属性的话 某些手机会有 父类窗口 控件无法点击的问题,所以只能舍弃PopupWindow 使用其他方法

如:自定义View显示\隐藏 加上动画 效果和PopupWindow一样一样的 但是没有那么多的事情

6、android 普通的ListView中的Item无法点击

原因分析

子控件中 有如ImageButton、Button、CheckBox等有强占焦点的控件,把焦点获取了

解决方案

Item布局的根布局加上

android:descendantFocusability="blocksDescendants"

或者在给其他控件就加上

android:clickable="false"android:focusable="false"android:focusableInTouchMode="false"

7、android WebView中的输入框无法输入数字或字母

原因分析

1、一个Activity有多个WebView, 导致焦点混乱,或者如:http://blog.csdn.net/zhangweiwtmdbf/article/details/39963705 

2、setOnKeyListener方法写的不规范导致,输入法里面的按钮 也是走 onKey监听的

解决方案

1、修改对应WebView的setOnTouchListener方法,如下:

// 解决输入框不能输入的bug  mWebView.setOnTouchListener(new View.OnTouchListener() {  @Override  public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) {  case MotionEvent.ACTION_DOWN:  case MotionEvent.ACTION_UP:  v.requestFocusFromTouch();  break;  case MotionEvent.ACTION_MOVE:  break;  case MotionEvent.ACTION_CANCEL:  break;  }  return false;  }  });  
2、规范setOnKeyListener方法,如下:

webview.setOnKeyListener(new OnKeyListener(){@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event){if (event.getAction() == KeyEvent.ACTION_DOWN){if (keyCode == KeyEvent.KEYCODE_BACK){cwGoBack();}else{ // 这个一定要写return false;}}return true;}});

8、android ViewPager嵌套后子ViewPager不能滑动

原因分析

嵌套子ViewPager的滑动事件被父ViewPager拦截

解决方案

重写父ViewPager,并在父ViewPager重载onInterceptTouchEvent方法,并返回false

@Override public boolean onInterceptTouchEvent(MotionEvent motionEvent){    return false;  }

9、android WebView不能上传文件或头像的问题

原因分析

android webview在默认情况下本来就是不支持网页中的文件上传功能的

解决方案

设置WebChromeClient,在WebChromeClient的实现类中覆盖文件选择的方法

PS:  如果使用了Cordova 需要设置CordovaChromeClient 奇怪的是 Cordova 已经做了相关操作,但是ValueCallback为null 所以有问题

参考: http://jingyan.baidu.com/article/ab0b563095d2b8c15afa7da4.html
 http://www.open-open.com/lib/view/open1371742003171.html

/** * requestCode */public static final int FILECHOOSER_RESULTCODE_N = 5173;    /** * 返回的Uri */public ValueCallback<Uri> mUploadMessage_n;/** * 自定义WebChromeClient 覆写openFileChooser方法 */private class MyChromeClient extends WebChromeClient{// js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获// Android > 4.1.1 调用这个方法public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){mUploadMessage_n = uploadMsg;Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("image/*");startActivityForResult(Intent.createChooser(intent, "完成操作需要使用"), FILECHOOSER_RESULTCODE_N);}// 3.0 + 调用这个方法public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){mUploadMessage_n = uploadMsg;Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("image/*");startActivityForResult(Intent.createChooser(intent, "完成操作需要使用"), FILECHOOSER_RESULTCODE_N);}// Android < 3.0 调用这个方法public void openFileChooser(ValueCallback<Uri> uploadMsg){mUploadMessage_n = uploadMsg;Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("image/*");startActivityForResult(Intent.createChooser(intent, "完成操作需要使用"), FILECHOOSER_RESULTCODE_N);}}/** * onActivityResult */protected void onActivityResult(int requestCode, int resultCode, Intent intent){super.onActivityResult(requestCode, resultCode, intent);if (requestCode == FILECHOOSER_RESULTCODE_N){Log.d(TAG, "did we get here?");if (null == mUploadMessage_n){return;}Uri result = intent == null || resultCode != Activity.RESULT_OK ? null : intent.getData();Log.d(TAG, "result = " + result);mUploadMessage_n.onReceiveValue(result);mUploadMessage_n = null;}}





0 0
原创粉丝点击