存档

2015年1月 的存档

android集成友盟优化篇【删除浪费资源】,安卓集成

2015年1月26日 没有评论

需要注意,如果你的分享activity在配置文件中有:android:noHistory=”true”
请去掉,否则会导致当前activity结束掉,当切换至分享平台的时候

增加权限:

<uses-permission android:name=”android.permission.INTERNET” />
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE” />
<uses-permission android:name=”android.permission.READ_PHONE_STATE” />
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />

在AndroidManifest.xml的application中增加:

<!– 友盟AppKey, 需要替换成你自己的 –>
<meta-data
android:name=”UMENG_APPKEY”
android:value=”54bdc692fd98c523df000469″ >
</meta-data>

添加如下代码:

private Button share_btn;

private UMSocialService mController;
private Context mContext;

private String shareTitlte = “分享标题”;
private String shareContent = “分享内容”;
private String shareUrl = “http://www.baidu.com”;
private String sharePic = “http://www.baidu.com/img/bdlogo.png”;

—————

oncreate中增加:
mContext = this.getApplicationContext();

给share_btn增加绑定函数:initUmengShare(true);//是否打印日志

————

增加如下函数:
private void initUmengShare(boolean printLog) {
if (printLog == true) {
SocializeConstants.SHOW_ERROR_CODE = true;
}
mController = UMServiceFactory.getUMSocialService(“包名称”);
mController.setShareContent(shareContent);
mController.setShareMedia(new UMImage(mContext, sharePic));
}

默认QQ,QQZONE,豆瓣,人人,新浪微博都是在面板中的

关闭QQ:mController.getConfig().removePlatform(SHARE_MEDIA.QQ);
关闭QQ空间;mController.getConfig().removePlatform(SHARE_MEDIA.QZONE);
关闭腾讯微博:mController.getConfig().removePlatform(SHARE_MEDIA.TENCENT);
关闭新浪微博:mController.getConfig().removePlatform(SHARE_MEDIA.SINA);

【反之,如果需要,请删除】

—————

启用QQ或者qq空间

都需要在AndroidManifest.xml的application中增加:

<!– ############ QQ空间和QQ SSO授权的Activity注册 ############ –>
<activity
android:name=”com.tencent.tauth.AuthActivity”
android:launchMode=”singleTask”
android:noHistory=”true” >
<intent-filter>
<action android:name=”android.intent.action.VIEW” />

<category android:name=”android.intent.category.DEFAULT” />
<category android:name=”android.intent.category.BROWSABLE” />

<data android:scheme=”tencent你的QQ互联APPID” />
</intent-filter>
</activity>
<activity
android:name=”com.tencent.connect.common.AssistActivity”
android:screenOrientation=”portrait”
android:theme=”@android:style/Theme.Translucent.NoTitleBar” >
</activity>

并且增加权限:
<!– 分享QQ、QQ空间所需权限 –>
<uses-permission android:name=”android.permission.GET_TASKS” />

开始在代码中增加:

private final String qqAppID = “100424468”;
private final String qqAppSecret = “c7394704798a158208a74ab60104f0ba”;

// 开始设置qq
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this, qqAppID, qqAppSecret);
qqSsoHandler.addToSocialSDK();

// 设置qq空间
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this,qqAppID, qqAppSecret);
qZoneSsoHandler.addToSocialSDK();

说明:
QQ空间不能分享纯图片,如果需要分享图片,需要单独设置链接(具体请参考最底部的,单独设置QQ空间内容)

—————

增加分享到微信:【drawable下面的4个文件都必须加入】

将wxapi/WXEntryActivity.java复制到包名下

在application中增加:

<!– 微信回调activity –>
<activity
android:name=”.wxapi.WXEntryActivity”
android:configChanges=”keyboardHidden|orientation|screenSize”
android:exported=”true”
android:screenOrientation=”portrait”
android:theme=”@android:style/Theme.Translucent.NoTitleBar” >
</activity>

复制:
//微信接口
private final String weixinAppID = “wx967daebe835fbeac”;
private final String weixinAppSecret = “5fa9e68ca3970e87a1f83e563c8dcbce”;
到代码中

在代码中增加:

UMWXHandler wxHandler = new UMWXHandler(mContext, weixinAppID, weixinAppSecret);
wxHandler.addToSocialSDK();
//微信提示:大于32k 压缩图片(http://bbs.umeng.com/forum.php?mod=viewthread&tid=5481&highlight=%E5%85%B3%E6%8E%89toast)
wxHandler.showCompressToast(false);

【注意,增加了微信之后,微信朋友圈也会直接显示,如果不需要微信朋友圈,请加入:】
mController.getConfig().removePlatform(SHARE_MEDIA.WEIXIN_CIRCLE);

—————

增加微信朋友圈:

加入代码:

// 支持微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(mContext, weixinAppID, weixinAppSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
//微信提示:大于32k 压缩图片(http://bbs.umeng.com/forum.php?mod=viewthread&tid=5481&highlight=%E5%85%B3%E6%8E%89toast)
wxCircleHandler.showCompressToast(false);

—————

增加新浪微博:

//设置新浪微博SSO handler
mController.getConfig().setSsoHandler(new SinaSsoHandler());

因为新浪微博默认就在里面,所以直接加上以上代码就可以显示,但是因为新浪微博使用了sso,所以必须页面底部增加:

【说明:由于腾讯微博SSO没有提供回调,因此腾讯微博SSO不会在onActivityResult方法内被调用(腾讯微博的流程不经过onActivityResult方法)】

/** 使用SSO授权必须添加如下代码 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMSsoHandler ssoHandler = mController.getConfig().getSsoHandler(
requestCode);
if (ssoHandler != null) {
ssoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}

到新浪http://open.weibo.com/注册
到友盟官方,组件-》社会化分享-》

—————

添加短信就很简单了:

// 添加短信
SmsHandler smsHandler = new SmsHandler();
smsHandler.addToSocialSDK();

—————

添加邮件也很简单

// 添加email
EmailHandler emailHandler = new EmailHandler();
emailHandler.addToSocialSDK();

//设置邮件分享内容,如果需要分享图片则只支持本地图片
//MailShareContent mail = new MailShareContent(localImage);
MailShareContent mail = new MailShareContent();
mail.setTitle(“邮件标题”);
mail.setShareContent(“邮件内容”);
mController.setShareMedia(mail);

 

—————

添加易信:
yxapi/YXEntryActivity.java,复制到包名下

加入代码:

//易信接口
private final String yixinAppKey = “yxc0614e80c9304c11b0391514d09f13bf”;

// 添加易信平台
UMYXHandler yixinHandler = new UMYXHandler(this, yixinAppKey);
yixinHandler.enableLoadingDialog(false);
yixinHandler.addToSocialSDK();

// 易信朋友圈平台
UMYXHandler yxCircleHandler = new UMYXHandler(this, yixinAppKey);
yxCircleHandler.setToCircle(true);
yxCircleHandler.addToSocialSDK();

易信需要增加application:
<activity
android:name=”.yxapi.YXEntryActivity”
android:theme=”@android:style/Theme.Translucent.NoTitleBar”
android:configChanges=”keyboardHidden|orientation|screenSize”
android:exported=”true”
android:screenOrientation=”portrait”>
</activity>

—————

添加来往:

将res/values/umeng_socialize_laiwang_strings.xml复制

加入如下代码:

//来往接口
private final String laiwangAppID = “laiwangd497e70d4”;
private final String laiwangAppSecret = “d497e70d4c3e4efeab1381476bac4c5e”;

//添加来往
UMLWHandler umlwHandler = new UMLWHandler(this, laiwangAppID,
laiwangAppSecret);
umlwHandler.addToSocialSDK();
umlwHandler.setMessageFrom(“友盟分享组件”);

//添加来往动态
UMLWHandler umlwDynamicHandler = new UMLWHandler(this,
laiwangAppID, laiwangAppSecret);
umlwDynamicHandler.addToSocialSDK();
umlwDynamicHandler.setMessageFrom(“友盟分享组件”);

—————

最后统一加上:

//默认会弹出:分享面板已打开,用下面代码清除【建议在mController.openShare之前调用】
mController.getConfig().closeToast();

//注册监听事件
SnsPostListener mSnsPostListener = new SnsPostListener() {

@Override
public void onStart() {

}

@Override
public void onComplete(SHARE_MEDIA platform, int stCode,
SocializeEntity entity) {

//不监听email和sms的返回事件
if(platform==SHARE_MEDIA.EMAIL || platform==SHARE_MEDIA.SMS){
return;
}
if (stCode == 200) {
Toast.makeText(mContext, “分享成功”, Toast.LENGTH_SHORT)
.show();
}
else {
Toast.makeText(mContext,
“分享失败 : error code : ” + stCode,
Toast.LENGTH_SHORT).show();
}
}
};
mController.registerListener(mSnsPostListener);

//开始打开面板
mController.openShare(this, mSnsPostListener);

————————————–

可以通过如下函数设置自定义排序:
mController.getConfig().setPlatformOrder(SHARE_MEDIA.QQ,
SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,
SHARE_MEDIA.SINA, SHARE_MEDIA.QZONE, SHARE_MEDIA.TENCENT,
SHARE_MEDIA.YIXIN, SHARE_MEDIA.YIXIN_CIRCLE,
SHARE_MEDIA.LAIWANG, SHARE_MEDIA.LAIWANG_DYNAMIC,
SHARE_MEDIA.EMAIL, SHARE_MEDIA.SMS);

————————————-

使用默认UI界面,添加自定义平台如“复制链接”

//添加自定义link
CustomPlatform customPlatform = new CustomPlatform(“copy_link”,
“复制链接”, R.drawable.ic_launcher);
customPlatform.mClickListener = new OnSnsPlatformClickListener() {
@Override
public void onClick(Context context, SocializeEntity entity,
SnsPostListener listener) {
ClipboardManager cmb = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(“http://www.baidu.com”);
}
};
mController.getConfig().addCustomPlatform(customPlatform);

———————————-

自定义不同平台的分享内容:

SinaShareContent sinaShareContent=new SinaShareContent();

参考:

新浪微博,SinaShareContent
腾讯微博,TencentWbShareContent
QQ,QQShareContent
QQ空间,QZoneShareContent
微信,WeiXinShareContent
微信朋友圈,CircleShareContent
短信,SmsShareContent

 

//设置邮件分享内容,如果需要分享图片则只支持本地图片
//MailShareContent mail = new MailShareContent(localImage);
MailShareContent mail = new MailShareContent();
mail.setTitle(“邮件标题”);
mail.setShareContent(“邮件内容”);
mController.setShareMedia(mail);

——————-

如果用了新浪微博网页版或者腾讯微博网页版,建议开启:

//关闭新浪网页微博、腾讯微博分享地理位置功能
mController.getConfig().setDefaultShareLocation(false);

并修改:对应布局文件:umeng_socialize_post_share.xml
android:id=”@+id/umeng_socialize_share_location”,对此加上:android:visibility=”gone”

———————————

最后在proguard-project.txt加上

-dontwarn com.baidu.**
-dontwarn com.amap.**
-dontwarn com.aps.**
-dontwarn com.sina.**
-dontwarn com.tencent.**
-dontwarn com.weibo.**
-dontwarn com.google.**
-keep class com.baidu.**{*;}
-keep class com.amap.**{*;}
-keep class com.aps.**{*;}
-keep class com.sina.**{*;}
-keep class com.tencent.** {*;}
-keep class com.weibo.** {*;}
-keep class com.google.** {*;}

-dontshrink
-dontoptimize

-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-libraryjars libs/SocialSDK_QQZone_2.jar
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
-keep public class [your_pkg].R$*{
public static final int *;
}

———————————

相关资源下载:进入ftp,在/file.my/下

密码是自己的农历生日

分类: android 标签: , ,

android安卓使用高德地图进行全球定位,获取经度纬度

2015年1月17日 没有评论

一开始使用百度,结果百度对全球的经度纬度尽然获取不怎么准确

使用谷歌?google被国内屏蔽了,开发很是烦恼啊

不如用高德吧,那么开始:

在配置文件的application段中增加:

<meta-data
android:name=”com.amap.api.v2.apikey”
android:value=”a64effd1b198f8d33d757a0c3f3d71f8″ />

其中a64effd1b198f8d33d757a0c3f3d71f8为你在高德申请的key

将Android_Location_V1.3.1.jar下载放到libs目录

导入权限(请全部导入,否则会导致有时候能获得有时候不行):

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />

完成参考代码如下:

package com.testAmapLocation;

import android.app.Activity;
import android.location.Location;
import android.os.Bundle;
import android.widget.Toast;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.LocationManagerProxy;
import com.amap.api.location.LocationProviderProxy;

public class StartActivity extends Activity implements AMapLocationListener {

//定位相关
private LocationManagerProxy mLocationManagerProxy;
private static final int MINTIME = 60 * 1000;//最小请求秒
private static final int MININSTANCE = 15;//最小请求间隔距离米
private String locationCountry = “”;
private String locationCity = “”;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
initAMap();
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
destoryLocationManager();
}

//清除定位监听,建议在activity的onPause/onDestroy中使用
public void destoryLocationManager() {
mLocationManagerProxy.removeUpdates(this);//移除定位请求
mLocationManagerProxy.destroy();//销毁定位
}

/** 初始化定位 */
public void initAMap() {
mLocationManagerProxy = LocationManagerProxy.getInstance(this);
//是否采用gps定位
mLocationManagerProxy.setGpsEnable(false);
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用removeUpdates()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用destroy()方法
// 其中如果间隔时间为-1,则定位只定一次,
// 在单次定位情况下,定位无论成功与否,都无需调用removeUpdates()方法移除请求,定位sdk内部会移除
mLocationManagerProxy.requestLocationData(
LocationProviderProxy.AMapNetwork, MINTIME, MININSTANCE, this);
}

private void locationUpdate(double latitude, double longitude) {
//http://maps.googleapis.com/maps/api/geocode/json?latlng=49.229222,-123.004605&sensor=true_or_false
locationCountry = “china”;
locationCity = “hefei”;

Toast.makeText(StartActivity.this,
“国家:” + latitude + “\n城市:” + longitude, Toast.LENGTH_LONG)
.show();
}

@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (amapLocation != null
&& amapLocation.getAMapException().getErrorCode() == 0) {
/*
* 经度amapLocation.getLatitude();
* 纬度amapLocation.getLongitude();
* * 定位方式amapLocation.getProvider()
* 地址amapLocation.getAddress()
* 国家amapLocation.getCountry()
* 省amapLocation.getProvince()
* 城市amapLocation.getCity()
* 区getDistrict()
* 街道amapLocation.getRoad()
* poi名称amapLocation.getPoiName()
* 城市区号amapLocation.getCityCode()
* 邮编amapLocation.getAdCode()
* */
locationUpdate(amapLocation.getLatitude(),
amapLocation.getLongitude());
}
else {
//错误信息
//amapLocation.getAMapException().getErrorCode()
}

}

@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}
}

分类: android 标签: , , ,

android定位,一行显示2块字,左侧区域根据右侧区域大小自动

2015年1月17日 没有评论

要实现如下效果

1,一行左侧显示一段文字,右侧显示一段文字

2,左侧背景色为黄色,右侧背景色为绿色

3,右侧宽度根据内容文字自动

4,左侧宽度根据右侧宽度自动

效果如图(2个图片):

111

22

这样在android安卓下如何实现呢?很难?公司程序说实现不了,自己动手,代码如下:

<?xml version=”1.0″ encoding=”utf-8″?>
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal”
android:paddingTop=”50dp” >

<TextView
android:id=”@+id/text1″
android:layout_width=”match_parent”
android:layout_height=”30dp”
android:layout_toLeftOf=”@id/text2″
android:background=”#ff6600″
android:ellipsize=”end”
android:gravity=”center”
android:paddingLeft=”6dp”
android:paddingRight=”6dp”
android:singleLine=”true”
android:text=”毛主席万岁,毛主席万岁,毛主席万岁,毛主席万岁,毛主席万岁,毛主席万岁,毛主席万岁” >
</TextView>

<TextView
android:id=”@+id/text2″
android:layout_width=”wrap_content”
android:layout_height=”30dp”
android:layout_alignParentRight=”true”
android:background=”#00ff00″
android:gravity=”center”
android:paddingLeft=”6dp”
android:paddingRight=”6dp”
android:text=”30/30″ >
</TextView>

</RelativeLayout>

分类: android 标签: , , , ,

android设置textview的文字中某一段文字背景色为指定颜色

2015年1月16日 没有评论

本函数可以设置textview的文字中某一段文字背景色为指定颜色

str为整体str

subStr为要设置的字符串

public void setSpannedTitle(String str, String subStr, TextView textView) {
if(str.equals(“”) || str.equals(null)){return;}
int index = 0;
int endIndex = 0;
SpannableString spannableStr = new SpannableString(str);
index = str.toLowerCase().indexOf(subStr.toLowerCase(), endIndex);
while (index != -1) {
spannableStr.setSpan(new BackgroundColorSpan(Color.YELLOW), index,
index + subStr.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
endIndex += index + subStr.length();
index = str.toLowerCase().indexOf(subStr.toLowerCase(), endIndex);
}
textView.setText(spannableStr);
textView.setMovementMethod(LinkMovementMethod.getInstance());//对了,这行加上的话可能会导致list里面的item无法点击,因为
}

比如,str为:中华人民共和国万岁,中华主席万岁

subStr为:中华

那么最后显示的效果为:中华人民共和国万岁,中华主席万岁

分类: android 标签:

android安卓手机禁止/过滤edittext输入表情

2015年1月15日 没有评论

如果你的android安卓手机需要给edittext禁止输入表情,或者输入后自动过滤,可以使用下面的类:

 

public class EmojiFilter {

//检测是否有emoji字符
public static boolean containsEmoji(String source) {
if (source.equals(null)) { return false; }
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (isEmojiCharacter(codePoint)) { return true; }
}
return false;
}

private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
|| (codePoint == 0xD)
|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}

//过滤emoji 或者 其他非文字类型的字符
public static String filterEmoji(String source) {
//在传入的source后面加上一个空字符。返回的时候trim掉就OK了
source += ” “;
// 如果不包含,直接返回
if (!containsEmoji(source)) {
return source.trim();
}
else {
StringBuilder buf = null;
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (isEmojiCharacter(codePoint)) {
if (buf == null) {
buf = new StringBuilder(source.length());
}
buf.append(codePoint);
}
}
if (buf == null) {
//如果没有找到 emoji表情,则返回源字符串
return source;
}
else {
//这里的意义在于尽可能少的toString,因为会重新生成字符串
if (buf.length() == len) {
buf = null;
return source;
}
else {
return buf.toString();
}
}
}
}
}

 

调用方法很简单:

EmojiFilter.filterEmoji(String)

似乎高版本的手机适用,但是低版本的系统,仍然无法过滤部分表情。

分类: android 标签: , ,
css.php