问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

在Android系统上启动知乎app时会唤醒微信是什么原因?

发布网友 发布时间:2022-04-10 16:06

我来回答

4个回答

懂视网 时间:2022-04-10 20:28

Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-declared receivers. If your app targets API level 26 or higher, you cannot use the manifest to declare a receiver for most implicit broadcasts (broadcasts that do not target your app specifically).

意思静态注册的广播在8.0以上是不能用,推荐用代码注册广播。
解决方案可以这么做:

配置:

<receiver android:name="MyStart">

 <intent-filter>
<action android:name="com.example.y.myapplication" />
</intent-filter>
</receiver>
代码:
Intent intent = new Intent();
  intent.setComponent(new ComponentName("com.example.y.myapplication","com.example.y.myapplication.MyStart"));
  getApplicationContext().sendBroadcast(intent);

sendBroadcast无法接收消息可能原因

标签:can   ecif   filter   dbr   ica   注册   无法   nal   cal   

热心网友 时间:2022-04-10 17:36

本回答信息来自针对微信Android客户端以及知乎Android客户端的分析。

我手机上装了一键清理的软件,平时从来不让微信在后台运行,但是每当打开知乎,不出三秒,微信消息就来了,消息并不固定,只是感觉微信被打开了,我在想知乎是不是跟微信合作,后台打开微信,然后以此来赚钱的呢?
首先针对题主的疑问,准备的回答:不是

实际的情况是,知乎调用微信sdk中分享的相关接口,微信sdk的相关接口里面,给微信发送了一个广播,微信app就被唤醒了,这不是知乎的主观行为,而是微信的(而且结合实际的分析来看,这个应该也算是正常的功能)。

以下是详细分析:

1 首先说一下app的被唤醒(自启动)机制。
app自启动,基本上都是依靠Android的广播来实现的,而且是静态注册的广播(在AndroidManifest.xml文件中进行配置的广播),发送广播的方法在一般情况下是sendBroadcast。

2 按照惯例,反编译一下微信apk,然后搜索一下它能够由哪些静态广播进行唤醒,同时抓取广播相关的log。

结合微信的AndroidManifest.xml文件以及抓取的log,可以知道相关的BroadcastReceiver是EntryReceiver,相关的action 为

com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER
com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER

从其名称上看,是和注册/注销相关,具体接收到广播之后做了哪些处理,这些就不赘述了。

I/ActivityManager( 1107): Start proc com.tencent.mm for broadcast com.tencent.mm/.plugin.base.stub.WXEntryActivity$EntryReceiver: pid=28779 uid=10131 gids={50131, 3003, 1028, 1015, 3002, 3001}

<receiver android:name="com.tencent.mm.plugin.base.stub.WXEntryActivity$EntryReceiver">
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER"/>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER"/>
</intent-filter>

3 接下来分析知乎的代码

搜索一下知乎反编译之后的smali文件(sendBroadcast),其中只有一条是和微信相关的

hu_2.0.3_176/smali/com/tencent/mm/sdk/openapi/j.smali: invoke-virtual {v0, v4, v1}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V

再看一下反编译的java文件,能够比较清楚的看到,就是利用com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER
这个action来进行注册,检查一些必要的信息。

根据这些信息,结合微信和知乎反编译之后的文件,已经可以完整的分析具体发生了哪些事情了。

com.tencent.mm.sdk.openapi.j

public final boolean a(String paramString)
{
if (!b("com.tencent.mm"))
{
com.tencent.mm.sdk.platformtools.a.a("MicroMsg.SDK.WXApiImplV10", "register app failed for wechat app signature check failed");
return false;
}
this.b = paramString;
com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.WXApiImplV10", "register app " + this.a.getPackageName());
Context localContext = this.a;
String str1 = "weixin://registerapp?appid=" + this.b;
String str2 = "com.tencent.mm" + ".permission.MM_MESSAGE";
Intent localIntent = new Intent("com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER");
String str3 = localContext.getPackageName();
localIntent.putExtra("_mmessage_sdkVersion", 553910273);
localIntent.putExtra("_mmessage_appPackage", str3);
localIntent.putExtra("_mmessage_content", str1);
localIntent.putExtra("_mmessage_checksum", b.a(str1, str3));
localContext.sendBroadcast(localIntent, str2);
com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.MMessage", "send mm message, intent=" + localIntent + ", perm=" + str2);
return true;
}

4 最后,因为偷懒,所以我只是大概的静态分析了相关代码,没发现知乎和微信做了什么丧失的事情,然后大概加了段log check了一下,从中也可以看出的确是和分享有关,至于使用时机及频率是否合适,这个和问题没什么关系,不做讨论。

D/hillwind( 5766): java.lang.Throwable
D/hillwind( 5766): at com.hillwind.android.util.RLog.printStackTrace(RLog.java:11)
D/hillwind( 5766): at com.tencent.mm.sdk.openapi.j.a(Unknown Source)
D/hillwind( 5766): at com.hu.android.util.af.b(WeChatHelper.java:43)
D/hillwind( 5766): at com.hu.android.widget.a.b(ActivityChooserModel.java:721)
D/hillwind( 5766): at com.hu.android.widget.ShareActionProvider.setShareIntent(ShareActionProvider.java:98)
D/hillwind( 5766): at com.hu.android.ui.fragment.bx.a(QuestionViewerFragment.java:221)
D/hillwind( 5766): at android.support.v4.app.j.a(FragmentManager.java:1973)
D/hillwind( 5766): at android.support.v4.app.g.onCreatePanelMenu(FragmentActivity.java:226)
D/hillwind( 5766): at android.support.v7.a.b.a(ActionBarActivity.java:233)
D/hillwind( 5766): at android.support.v7.a.g.a(ActionBarActivityDelegateICS.java:146)
D/hillwind( 5766): at android.support.v7.a.b.onCreatePanelMenu(ActionBarActivity.java:200)
D/hillwind( 5766): at android.support.v7.a.g$a.onCreatePanelMenu(ActionBarActivityDelegateICS.java:293)
D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:472)
D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:878)
D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:257)
D/hillwind( 5766): at android.os.Handler.handleCallback(Handler.java:733)
D/hillwind( 5766): at android.os.Handler.dispatchMessage(Handler.java:95)
D/hillwind( 5766): at android.os.Looper.loop(Looper.java:136)
D/hillwind( 5766): at android.app.ActivityThread.main(ActivityThread.java:5140)
D/hillwind( 5766): at java.lang.reflect.Method.invokeNative(Native Method)
D/hillwind( 5766): at java.lang.reflect.Method.invoke(Method.java:515)
D/hillwind( 5766): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
D/hillwind( 5766): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
D/hillwind( 5766): at dalvik.system.NativeStart.main(Native Method)

热心网友 时间:2022-04-10 18:54

知乎调用微信sdk中分享的相关接口,微信sdk的相关接口里面,给微信发送了一个广播,微信app就被唤醒了,这不是知乎的主观行为,而是微信的(而且结合实际的分析来看,这个应该也算是正常的功能)。

1 首先说一下app的被唤醒(自启动)机制。

app自启动,基本上都是依靠Android的广播来实现的,而且是静态注册的广播(在AndroidManifest.xml文件中进行配置的广播),发送广播的方法在一般情况下是sendBroadcast。

2 按照惯例,反编译一下微信apk,然后搜索一下它能够由哪些静态广播进行唤醒,同时抓取广播相关的log。

结合微信的AndroidManifest.xml文件以及抓取的log,可以知道相关的BroadcastReceiver是EntryReceiver,相关的action 为

com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER
com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER

从其名称上看,是和注册/注销相关,具体接收到广播之后做了哪些处理,这些就不赘述了。

3 接下来分析知乎的代码,搜索一下知乎反编译之后的smali文件(sendBroadcast),其中只有一条是和微信相关的

热心网友 时间:2022-04-10 20:28

本回答信息来自针对微信Android客户端以及知乎Android客户端的分析。

我手机上装了一键清理的软件,平时从来不让微信在后台运行,但是每当打开知乎,不出三秒,微信消息就来了,消息并不固定,只是感觉微信被打开了,我在想知乎是不是跟微信合作,后台打开微信,然后以此来赚钱的呢?

首先针对题主的疑问,准备的回答:不是

实际的情况是,知乎调用微信sdk中分享的相关接口,微信sdk的相关接口里面,给微信发送了一个广播,微信app就被唤醒了,这不是知乎的主观行为,而是微信的(而且结合实际的分析来看,这个应该也算是正常的功能)。

以下是详细分析:

1 首先说一下app的被唤醒(自启动)机制。
app自启动,基本上都是依靠Android的广播来实现的,而且是静态注册的广播(在AndroidManifest.xml文件中进行配置的广播),发送广播的方法在一般情况下是sendBroadcast。

2 按照惯例,反编译一下微信apk,然后搜索一下它能够由哪些静态广播进行唤醒,同时抓取广播相关的log。

结合微信的AndroidManifest.xml文件以及抓取的log,可以知道相关的BroadcastReceiver是EntryReceiver,相关的action 为

com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER

com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER

从其名称上看,是和注册/注销相关,具体接收到广播之后做了哪些处理,这些就不赘述了。

I/ActivityManager( 1107): Start proc com.tencent.mm for broadcast com.tencent.mm/.plugin.base.stub.WXEntryActivity$EntryReceiver: pid=28779 uid=10131 gids={50131, 3003, 1028, 1015, 3002, 3001}

<receiver android:name="com.tencent.mm.plugin.base.stub.WXEntryActivity$EntryReceiver">

<intent-filter>

<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER"/>

<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER"/>

</intent-filter>

3 接下来分析知乎的代码

搜索一下知乎反编译之后的smali文件(sendBroadcast),其中只有一条是和微信相关的

hu_2.0.3_176/smali/com/tencent/mm/sdk/openapi/j.smali:    invoke-virtual {v0, v4, v1}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V

再看一下反编译的java文件,能够比较清楚的看到,就是利用com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER
这个action来进行注册,检查一些必要的信息。

根据这些信息,结合微信和知乎反编译之后的文件,已经可以完整的分析具体发生了哪些事情了。

com.tencent.mm.sdk.openapi.j

public final boolean a(String paramString)

{

if (!b("com.tencent.mm"))

{

com.tencent.mm.sdk.platformtools.a.a("MicroMsg.SDK.WXApiImplV10", "register app failed for wechat app signature check failed");

return false;

}

this.b = paramString;

com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.WXApiImplV10", "register app " + this.a.getPackageName());

Context localContext = this.a;

String str1 = "weixin://registerapp?appid=" + this.b;

String str2 = "com.tencent.mm" + ".permission.MM_MESSAGE";

Intent localIntent = new Intent("com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER");

String str3 = localContext.getPackageName();

localIntent.putExtra("_mmessage_sdkVersion", 553910273);

localIntent.putExtra("_mmessage_appPackage", str3);

localIntent.putExtra("_mmessage_content", str1);

localIntent.putExtra("_mmessage_checksum", b.a(str1, str3));

localContext.sendBroadcast(localIntent, str2);

com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.MMessage", "send mm message, intent=" + localIntent + ", perm=" + str2);

return true;

}

4 最后,因为偷懒,所以我只是大概的静态分析了相关代码,没发现知乎和微信做了什么丧失的事情,然后大概加了段log check了一下,从中也可以看出的确是和分享有关,至于使用时机及频率是否合适,这个和问题没什么关系,不做讨论。

D/hillwind( 5766): java.lang.Throwable

D/hillwind( 5766): at com.hillwind.android.util.RLog.printStackTrace(RLog.java:11)

D/hillwind( 5766): at com.tencent.mm.sdk.openapi.j.a(Unknown Source)

D/hillwind( 5766): at com.hu.android.util.af.b(WeChatHelper.java:43)

D/hillwind( 5766): at com.hu.android.widget.a.b(ActivityChooserModel.java:721)

D/hillwind( 5766): at com.hu.android.widget.ShareActionProvider.setShareIntent(ShareActionProvider.java:98)

D/hillwind( 5766): at com.hu.android.ui.fragment.bx.a(QuestionViewerFragment.java:221)

D/hillwind( 5766): at android.support.v4.app.j.a(FragmentManager.java:1973)

D/hillwind( 5766): at android.support.v4.app.g.onCreatePanelMenu(FragmentActivity.java:226)

D/hillwind( 5766): at android.support.v7.a.b.a(ActionBarActivity.java:233)

D/hillwind( 5766): at android.support.v7.a.g.a(ActionBarActivityDelegateICS.java:146)

D/hillwind( 5766): at android.support.v7.a.b.onCreatePanelMenu(ActionBarActivity.java:200)

D/hillwind( 5766): at android.support.v7.a.g$a.onCreatePanelMenu(ActionBarActivityDelegateICS.java:293)

D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:472)

D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:878)

D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:257)

D/hillwind( 5766): at android.os.Handler.handleCallback(Handler.java:733)

D/hillwind( 5766): at android.os.Handler.dispatchMessage(Handler.java:95)

D/hillwind( 5766): at android.os.Looper.loop(Looper.java:136)

D/hillwind( 5766): at android.app.ActivityThread.main(ActivityThread.java:5140)

D/hillwind( 5766): at java.lang.reflect.Method.invokeNative(Native Method)

D/hillwind( 5766): at java.lang.reflect.Method.invoke(Method.java:515)

D/hillwind( 5766): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)

D/hillwind( 5766): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)

D/hillwind( 5766): at dalvik.system.NativeStart.main(Native Method)

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
貔貅请多少只 生活的滋味 写写你的生活实际 这个短文收到什么启发 阳光城并州府施工进度 狙击手幽灵战士契约2伪装所在地点位置分享介绍_狙击手幽灵战士契约2伪 ... 狙击手幽灵战士契约2弹药怎么搜集_狙击手幽灵战士契约2弹药怎么获得 《狙击手幽灵战士2》攻略图文详解(精准射击) 生产经营能力主要形式 每到节假日新华书店坐满了看书的人把坐满了看书的人写具体 三星4300提示墨粉用尽 为什么就qq浏览器提示我没安装flash 用其他打浏览器都可以看视屏? adobe flash player被禁用怎么办qq浏览器 龙眼石的简介 窗帘杆掉了洞很大 一张让你感动的劳动者照片,并注明推荐理由。(推荐理由文字不得少于50字)? 2021年民法典对物业空置房新规 房子空置没有人住,业主还要交物业费吗?民法典给了明确答案 朋友圈怎么朴实描述劳动模范的句子 搜狗输入法如何设置字体预览呢? 求电脑用各种字体的预览图? sendBroadcast和sendStickyBroadcast的区别 四年级作文《我xx点赞》开头 结尾 为爱心点赞作文开头 为自己点赞作文结尾 为你点赞作文开头关于孝心的 为他人点赞作文结尾 作文题目 “让我为你点赞”600字 开头结尾前后照应 要有感悟 以一两件好人好事为内容 每段结 《为你点赞作文》开头和结尾 煮米饭一碗米几碗水,我总是控制不好~教教我 sendBroadcast无法执行到却没有报错是为什么 可贤这名字含义是什么 “贤”字跟“悦”字合起来是什么意思?也就是说“贤悦”是什么寓意?本人想用这两个字取名。 尹佳贤这个名字的含义? 王宇贤名字的含义是什么? 男孩的名字里有个贤字带表什么意思 郭品贤这个名字怎么样 带贤字的饭店名怎么起 三星笔记本BIOS怎么设置硬盘启动? 三星270E5J进入BIOS,怎么设置硬盘模式? 三星笔记本怎么进入bios设置更改硬盘接口 三星bios硬盘设置方法有谁清楚 三星笔记本电脑Sumsung BIOS configuration,修改硬盘 三星笔记本进入BIOS改硬盘的兼容性模式的方法是什么 三星R429笔记本BIOS修改硬盘兼容模式 三星R463如何进BIOS把硬盘方式改成兼容 求解:三星,R428BIOS怎么设置??光驱启动改为硬盘启动方法!!! 三星笔记本RV411,怎么在bios里面把硬盘模式改成兼容模式 三星270E5J进入BIOS,怎么设置硬盘模式 失物招领怎么样 失物招领多久无人认领归国家所有
  • 焦点

最新推荐

猜你喜欢

热门推荐