android使用友盟分享sdk分享到qq成功后遇到app被销毁后回到此分享界面无法正常点击界面问题
小程序限制分享转发的解决方案

⼩程序限制分享转发的解决⽅案
分享解决⽅案:
重叠按钮法,利⽤冒泡机制得知⽤户已确认分享,此时建⽴记录
即:在open-type="share"的按钮(css相对定位)上嵌套⼀个带有点击事件的view,并设置绝对定位使其充满button,利⽤冒泡机制,在触发onShareAppMeassage的同时,触发⾃定义事件。
该记录包含:记录ID、分享者ID、分享的项⽬类型、分享项⽬在其主表中的ID、分享时间、分享状态、接收者ID、接受时间,在记录被初次创建时有:记录ID、分享者ID、分享的项⽬ID、分享的项⽬类型、分享时间、状态(可⽤)
当此分享被点开时,会通过分享者ID、分享的项⽬ID、分享的项⽬类型定位到此条记录,随后检查其可⽤性:主要检查时间是否超过了24⼩时以及状态是否为失效,在检查完成后,该条记录的状态都会设置为失效,因为这表明此条分享已经被打开过了,如果接收者选择了确认接受,那么记录的接收者ID和接受时间也会被同时更新进记录。
这⼀套流程可以做到:当分享者确认分享之后(点击“我已知晓,确认分享”),记录会被创建,并设置为初始状态(包含基本信息的可⽤状态),⽆论这条消息是否被发送出去了,这条记录都会被创建。
当接收者打开这条记录并接受分享后,⽆论接收者是否成功接受了这条分享,这条记录都会被标记为失效,即使再次转发、再次打开不可以绑定分享的项⽬了。
android 后台无法启动 activity 的解决方法

android 后台无法启动 activity 的解决方法在Android中,后台无法启动Activity的问题通常是由于系统对后台应用的行为进行限制所导致的。
从Android 10(API级别29)开始,系统对后台应用启动Activity进行了限制。
当App的Activity不在前台时,其启动Activity会被系统拦截,导致无法启动。
针对这个问题,以下是一些可能的解决方案:1. 使用全屏Intent:Android官方提供了一种折中方案,即使用全屏Intent(full-screen intent)。
在创建通知栏通知时,加入full-screen intent设置。
这样可以在用户点击通知时启动相应的Activity。
2. 使用Notification:另一种常见的解决办法是使用通知(Notification)。
当后台任务完成时,可以通过发送一个通知来提示用户,并在用户点击通知时启动相应的Activity。
3. 请求必要的权限:某些手机品牌(如小米)可能对后台弹出界面和锁屏显示权限有特殊要求。
如果应用需要这些权限,需要在应用中请求并获得用户的授权。
4. 优化应用性能:确保应用在后台运行时不会导致系统资源占用过高,这样可以避免系统为了保护设备性能而限制应用的后台行为。
5. 使用JobScheduler或WorkManager:对于需要在后台执行的任务,可以考虑使用JobScheduler或WorkManager来安排和管理任务。
这些API 可以帮助你更好地控制后台任务的执行时间和优先级。
6. 升级应用至最新版本:有时,应用本身的版本可能存在一些已知的问题或漏洞。
升级至最新版本可能会解决一些后台无法启动Activity的问题。
请注意,不同的解决方案可能适用于不同的设备和Android版本,因此在实际应用中可能需要尝试不同的方法来找到最适合的解决方案。
同时,也建议查阅最新的官方文档和社区讨论,以获取更详细和最新的解决方案。
如何解决应用限制不生效

如何解决应用限制不生效有时当我们设置应用限制之后,会发现好多软件都不生效,该怎办?下面是整理的一些关于如何解决应用限制不生效的相关资料,供你参考。
应用限制不生效的解决方法如下:问题一、设置应用限制后,限制QQ不生效,怎么办?答:请检查以下几点:[1] 确认被限制的电脑的IP地址在受控地址组中。
[2] 确认应用限制功能总开关启用。
[3] 确认按照应用限制设置流程操作,即用户组、限制列表等设置均正确。
[5] 检查是否设置QQ黑白名单,确认设置条目与需求不冲突。
[4] 如果设置正确,但依旧不生效,确认应用限制的策略库是否为最新,如果不是,请升级策略库。
[5] 仍然无法限制,请致电400-8863-400寻求技术支持。
问题二、限制迅雷下载不生效,怎么办?答:迅雷的主要下载方式为P2P下载,但作为一个下载工具,如果我们在指定下载内容处直接选择“使用迅雷下载”,那么此类下载方式的行为有别于P2P下载。
路由器的应用限制主要限制迅雷P2P 下载的应用,对单链接下载不进行限制。
如果是P2P下载,但是不生效,请按照以下方式排查:[1] 确认被限制的电脑的IP地址在受控地址组中。
[2] 确认应用限制功能总开关启用。
[3] 确认按照应用限制设置流程操作,即用户组、限制列表等设置均正确。
[4] 如果设置正确,但依旧不生效,确认应用限制的策略库是否为最新,如果不是,请升级策略库。
[5] 仍然无法限制,请致电400-8863-400寻求技术支持。
问题三、为什么使用一段时间后,应用限制不生效了?答:请按照以下方法排查:[1] 请检查受控电脑的IP地址是否变化,确定IP地址是否在受控组。
[2] 应用程序的版本的更新可能引发通讯特征的变化,路由器的限制数据库可能无法识别更新后的特征,从而导致限制失效,这种情况是无法避免的。
访问我司官方网站服务支持>> 下载中心,输入产品型号进行搜索,下载最新日期的应用数据库文件。
友盟使用文档

友盟使⽤⽂档友盟消息推送服务器端API V1.0指南1 概述1.1 基本说明本⽂所描述的API接⼝均基于HTTP Rest协议, 若⽆特殊说明接⼝均使⽤UTF-8编码, 消息体参数以及返回结果均采⽤Json格式。
注意: 使⽤API前需要在Web后台获取appkey 和app_master_secret,同时在web 后台添加服务器IP地址做IP⽩名单过滤。
1.2 基本概念appkey:应⽤唯⼀标识app_master_secret:服务器Key。
device_token: 友盟后台对设备的唯⼀标识。
注意, Android的device_token是44位字符串, iOS的device-token是64位。
单播: 向指定的设备发送消息。
⼴播: 向安装该APP的所有设备发送消息。
组播: 向满⾜特定条件的设备集合发送消息,例如: "特定版本"、"特定地域"等。
alias: 第三⽅账号, 开发者可以在SDK中调⽤setAlias接⼝,SDK会把设定的alias,alias_type与device_token进⾏绑定传回到后端。
便于开发者通过⾃有业务逻辑筛选出alias,通过发送alias给友盟进⾏消息推送。
通知-Android: 消息送达到⽤户设备后,由友盟处理内容并在通知栏上显⽰通知内容。
消息-Android: 消息送达到⽤户设备后,消息内容被传递给应⽤⾃⼰解析和后续处理,友盟不对消息内容进⾏展⽰和提醒。
通知/消息-iOS: 和APNs定义⼀致。
测试模式-Android: 在⼴播、组播等⼤规模发送消息的情况下,为了防⽌开发者误发消息, 增加了测试模式。
测试模式下,只会将消息发送给测试设备。
测试设备需要到⽹站上添加。
测试模式对单播不⽣效。
测试模式-iOS: iOS的测试模式对应APNs的开发环境(sandbox)。
2 接⼝描述2.1 消息发送2.1.1 功能说明开发者调⽤此接⼝,向指定终端⽤户(单播)、所有终端⽤户(⼴播) 或满⾜特定条件的终端⽤户群(组播),发送通知或消息。
手机程序老是停止运行怎么办

手机程序老是停止运行怎么办很多使用Android手机的用户都碰到过这样一种情况:运行某APP时,弹出“应用程序停止运行”的报错提示,或是APP直接闪退.这是为什么呢线刷宝指出,当遇见这些问题一般是手机内存不足导致应用强制退出或者程序版本和系统存在兼容性问题.线刷宝技术人员在工作中发现有一下几点可以在不刷机的情况下能解决的方法,大家不妨看看吧一、应用程序APP 缓存和数据过多,导致强制退出如果某款APP以前运行好好的,但突然出现“应用程序停止运行”,这时我们可以试试清理该APP的缓存数据.以网易新闻为例,进入“设置→应用程序→全部”,找到并点击网易新闻的图标,在应用信息界面中选择“清除数据”以及“清除缓存”即可.二、当然程序出现停止运行也可能是系统内存不足引起的.我们关闭一些不常用应用释放部分内存即可三、通过手机里装的第三方安全类的软件,如360安全卫士或者手机自带的安全中心进行垃圾清理四、可能是该应用程序和当前系统存在冲突刚刚安装的某APP出现了运行报错的问题,则很有可能是该APP与手机当前的系统存在冲突.要解决的话要不是将手机系统更新到最新版本,或者将APP更新到最新版本.五、一些支持存储卡应用安装的也容易出现上述应用停止运行问题,以此在以后选择程序安装位置,请选择“由系统决定”.六、程序本身问题:有些程序本身存在问题,如前期腾讯组件出现问题,导致腾讯游戏出现停止运行的提示.小提示:如果某APP在升级最新版本后出现了报错,则可断定是新版APP与系统有冲突.我们可以在应用市场下载历史版本安装.以上六中情形基本上包括所有日常遇到的手机应用停止运行的情况,如果还是无法解决可以考虑恢复出厂设置或者刷机来解决.一开始叫我刷机,我是拒绝的后来与线刷宝邂逅,才发现找到了.....真爱线刷宝 - 国内首款智能刷机救砖软件,支持三星、小米、华为、联想、中兴等近30个手机品牌,已兼容千余款手机型号,免费提供海量的纯净官方ROM包关注“线刷宝”微信公众平台。
android--------AndroidStudio常见问题以及解决方式

android--------AndroidStudio常见问题以及解决⽅式gradle build的时候出现的问题:Error:Execution failed for task ':app:packageDebug'. Duplicate files copied in APK META-INF/notice.txt解决办法:有时候gradle中途突然死机也会导致module不识别,删除⼯程的build⽂件夹重新run即可()Android studio设置启动时不⾃动打开上次关闭的项⽬打开配置页在搜索栏中输⼊ system 点击System Settings 将红框内的勾选(reopen last project on start up)去掉###AndroidStudio怎么关联SVN?####使⽤Android Studio打Andorid apk包的流程,andoridapk关于Android studio打包发布,以及Android签名的获取Android App的签名打包(晋级篇)Android Studio实现代码混淆1.Android studio ⽆法创建Android项⽬根本就没有这个选项因为android support没有勾选2.Android studio ⼯具栏不⼩⼼隐藏了View然后Toolsbar打勾就好了。
Android Studio底边栏选项不见了,***何调出来3.moudle被删除了,怎么恢复?在project 的setting⽂件⾥include ':moudle名'4.怎么导⼊jar包第⼀步:切换成“project"模式,⽅能看见libs⽬录。
第⼆步:将jar包拖⼊libs⽬录,1.2的as直接复制是不⾏的。
第三步:打开⼯程所在Project Structure,然后选择Dependencies,点击那个加号选择File Dependency ,然后再Libs⽂件夹中选择要导⼊的jar包。
android 微信 sdk api调用不成功解决方案
android 微信sdkapi调用不成功解决方案最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走。
1、申请App_ID2、填写包名3、获取程序签名的md5值,这三步只要你走对了就能调通,可是大家都不知道有时候我们打包的keystore和我们打包的keystore获取到的程序签名的md5是不一样的。
我们在申请的时候填的程序签名值是正式打包的,但我们在eclipse部署上去的却是用的我们默认的debug.keystore.而这样导致的后果就是程序签名不一样,会一直调不通。
甚至我们都不知道我们错在哪。
先说一下怎么部署微信官网下的demo吧:【下面引用的内容为微信官网】微信对Android API调用是需要严格的三个验证,只有app_id包名和程序签名完全对了的情况下才可以调得通。
如何运行sdkdemo工程1、解压sdk demo工程压缩包,并导入到workspace,如下图:2、选择Eclipse顶部菜单Window->Preferences,在弹出的对话框中,选择Android 目录下的Build,如下图:指定Custom debugkeystore选项的路径为sdk demo工程目录中的debug.keystore 文件,如下图:并应用该配置。
3、运行该sdk_sample工程。
好了,按以上三步走,你就能走通微信的DEMO,现在再来看我们自己的DEMO1、custom Debugkeystore:换成我们自己的keystore2、装上我们的应用到手机端,再去微信官网下载一个获取程序签名md5值的apk输入包名:3、去微信后台申请我们调试的应用:接着再写上示例代码中的代码:复制代码代码如下:private Button btn_share;public static final String WX_APP_ID = "wxc85b9dbef61b3fe4"; private IWXAPI api;private String text="testssss";@Overridepublic void onCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);btn_share = (Button)findViewById(R.id.btn_share);api = WXAPIFactory.createWXAPI(this, WX_APP_ID,false); btn_share.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {api.registerApp(WX_APP_ID);// 初始化一个WXTextObject对象WXTextObjecttextObj = newWXTextObject();textObj.text = text;// 用WXTextObject对象初始化一个WXMediaMessage对象WXMediaMessagemsg = newWXMediaMessage();msg.mediaObject = textObj;// 发送文本类型的消息时,title字段不起作用msg.title = "Will be ignored";msg.description = "sdddd";// 构造一个ReqSendMessageToWX.Reqreq = newSendMessageToWX.Req();req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求req.message = msg;//req.scene = SendMessageToWX.Req.WXSceneTimeline ;// 调用api接口发送数据到微信api.sendReq(req);finish();}});}private StringbuildTransaction(finalString type) {return (type == null) ? String.valueOf(System.currentTimeMillis()):type + System.currentTimeMillis();}至此,大功告成。
微信JS-SDKupdateAppMessageShareData安卓不能自定义分享详解
微信JS-SDKupdateAppMessageShareData安卓不能⾃定义分享详解最近开发⼀个项⽬时,有微信H5⽹页⾃定义分享功能,使⽤了微信JS-SDK的分享到好友和分享到朋友圈功能。
微信开发⽂档这样写的⾃定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0)wx.ready(function () { //需在⽤户可能点击分享按钮前就先调⽤wx.updateAppMessageShareData({title: '', // 分享标题desc: '', // 分享描述link: '', // 分享链接,该链接域名或路径必须与当前页⾯对应的公众号JS安全域名⼀致imgUrl: '', // 分享图标success: function () {// 设置成功}});⾃定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容(1.4.0)wx.ready(function () { //需在⽤户可能点击分享按钮前就先调⽤wx.updateTimelineShareData({title: '', // 分享标题link: '', // 分享链接,该链接域名或路径必须与当前页⾯对应的公众号JS安全域名⼀致imgUrl: '', // 分享图标success: function () {// 设置成功}});看起来很简单,直接加⼊到H5⽹页⾥⾯了wx.config({debug: true, // 开启调试模式,调⽤的所有api的返回值会在客户端alert出来,若要查看传⼊的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯⼀标识timestamp: , // 必填,⽣成签名的时间戳nonceStr: '', // 必填,⽣成签名的随机串signature: '',// 必填,签名jsApiList: ['updateAppMessageShareData','updateTimelineShareData'] // 必填,需要使⽤的JS接⼝列表});其他参数参考根据⾃⼰情况填写,并设置debug: true测试环境:微信Web开发者⼯具,测试接⼝,ok苹果X,查看debug的弹出信息,⼀切ok;分享测试,⼀切ok⼤⼯搞成。
Android开发中一些常见的问题解决方案
Android开发中⼀些常见的问题解决⽅案分享⼀下⾃⼰开发中遇到的⼀些常见问题及解决⽅案,⽅⾯以后快速开发少⾛弯路,也可以供⼤家⼀起学习。
1、开发中很常见的⼀个问题,项⽬中的listview不仅仅是简单的⽂字,常常需要⾃⼰定义listview,⾃⼰的Adapter去继承BaseAdapter,在adapter中按照需求进⾏编写,问题就出现了,可能会发⽣点击每⼀个item的时候没有反应,⽆法获取的焦点。
原因:多半是由于在你⾃⼰定义的Item中存在诸如ImageButton,Button,CheckBox等⼦控件(也可以说是Button或者Checkable的⼦类控件),此时这些⼦控件会将焦点获取到,所以常常当点击item时变化的是⼦控件,item本⾝的点击没有响应。
解决⽅案:在布局中设置 android:descendantFocusability="blocksDescendants"2、ScrollView和ListView两个View都有滚动的效果,在嵌套使⽤时起冲突的问题/*** 重新计算ListView的⾼度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使⽤时起冲突的问题* @param listView*/public void setListViewHeight(ListView listView) {// 获取ListView对应的AdapterListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) {return;}int totalHeight = 0;for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数⽬View listItem = listAdapter.getView(i, null, listView);listItem.measure(0, 0); // 计算⼦项View 的宽⾼totalHeight += listItem.getMeasuredHeight(); // 统计所有⼦项的总⾼度}youtParams params = listView.getLayoutParams();params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));listView.setLayoutParams(params);}在scrollview⾥⾯嵌套了⼀个listview ,通过设置⼀个⽅法设置了listview的⾼度现在的情况就是进到这个界⾯的时候看到的不是最上⾯⽽是中间,该问题的解决办法为:mScrollView.smoothScrollTo(0,20);如此以上代码还是⽆效,在代码⾥去掉listview的焦点 lv.setFocusable(false),再试下就可以了;或者。
两步解决:你来晚了,分享的文件已经被取消
两步解决:你来晚了,分享的⽂件已经被取消⽹上找资源本来就不是省⼼的事⼉
更加疼的是,
好不容易找到⼀个百度⽹盘链接,却是——
准备好,要发车了。
坐好,只有两步:
①在地址栏找到:https:///share/link?shareid=3042340207&uk=2209806755
②把加粗部分(link?shareid=3042340207&)替换成:home?,然后回车。
强调:1.这种⽅法不是万能的,⽽是成功率和推荐度最⾼的。
2.那个问号是英⽂字符?,不是中
⽂字符?。
重要的东西总是在后⾯:
细⼼的朋友会发现,我分享了⼀套软件,如果你按上⾯的⽅法成功拿到了,不看下⼀期⽂章,那……祝你——
因为今天写这篇⽂章,就是为了明天分享资源,链接失效时⼤家⾃⾏解决的。
明天看谁跑赢度娘吧,明⼉见!
下期⽂章:⼀次性集齐⼤学⽣学习办公必备软件(附资源)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android 使用友盟分享SDK,分享到QQ成功后,遇到app 被销毁后,回到此分享界面无法正常点击界面问题。
当使用友盟分享SDK,成功分享到QQ界面后,在某些情况下自己的app会被销毁,而此时返回自己的app,发现界面展示没有问题,但是屏幕点击却一点效果都没有。
经仔细测试发现底部物理键和app外的手机系统状态栏却可以正常点击,且点击一次返回键后当前app的界面也可以正常点击了。
有点神乎其神。
问了友盟技术支持,他们的回答一点鸟用都木有~~那回答是非常非常官方的。
不知道是QQ的问题还是友盟的问题,由于项目紧急的原因,那只能自己强行解决了。
问题分析:
在分享界面的activity生命周期中用代码输出当前app的栈顶activity发现,在以上情况下回来到当前app,栈顶activity 并不是自己的activity而是名为:
mon.AssistActivity
目测是腾讯的activity。
而此activity在app未被销毁时正常关闭自己,但是在app被销毁后变量还原,导致某些状态丢失而无法正常关闭自己(从分享成功后app再销毁,AssistActivity还是无法正常关闭可知并不是通过广播来关闭此界面,而是设置了某些状态来关闭自己)。
解决方案:
经过测试发现
(1)、app未被销毁时返回来分享activity生命周期:onRestart
-->onStart: top
activity:mon.AssistActivity
-->onResume: top
activity:mon.AssistActivity (2)、app被销毁时返回来分享activity生命周期:
onCreate
-->onStart: top
activity:mon.AssistActivity
-->onRestoreInstanceState
-->onResume: top activity:
mon.AssistActivity
-->onPause: top activity:
mon.AssistActivity
(3)、温习一下一般activity界面切换生命周期:A-->B
A.onPause-->
B.onCreate
-->B.onStart-->B.onResume-->A.onStop
从以上1,2,3可以分析出app销毁后回到此app分享界面并非在栈顶,且我们可以在onPause检测并处理,我是通过发出一个启动自己的intent,并设置清除栈顶activity来强行清除未被正常关闭的AssistActivity的。
简易代码如下:private
boolean isFromActivityReCreate = false; // 执行onCretae是否是带有savedInstanceState启动的
@Override
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
isFromActivityReCreate = true;
}
}
@Override
protected void onPause() {
if(isFromActivityReCreate &&isNeedRestart()) { Intent intent = new Intent(ctx, this.getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //清除栈顶的activity
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);/ /不显示多余的动画,假装没有重新启动
//记得带需要的参数intent.putExtra();
startActivity(intent);
}
isFromActivityReCreate = false;
}
private boolean isNeedRestart(){
ActivityManager am = (ActivityManager) ctx
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks =
am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
RunningTaskInfo taskInfo = tasks.get(0);
if
(topActivity.getPackageName().equals(ctx.getPackageName())) {
// 若当前栈顶界面是AssistActivity,则需要手动关闭
if (topActivity.getClassName().equals(
"mon.AssistActivity")
return true;
return false;} 问题额外关注点:
在onSaveInstanceState和onRestoreInstanceState方法需要做好activity的状态保存和恢复,特别是第三方的SDK,否则坑挖大了,用户可没法像我们程序猿这样好好分析问题哈。