gpt4 book ai didi

android - 广播接收器 MY_PACKAGE_REPLACED 从未调用

转载 作者:行者123 更新时间:2023-12-03 17:39:54 25 4
gpt4 key购买 nike

我有以下应用场景:
1) 自行更新的应用程序
2)设备已root
3)在线检查版本,如果新版本在线,它会下载“apk”文件并安装它

一切正常,但新版本安装后APP没有重启。我试图设置 MY_PACKAGE_REPLACED 广播接收器,但它从未被调用。应用程序安装新并停止,但应用程序中的接收器永远不会被触发。

我究竟做错了什么?

编码:
显现

<receiver android:name=".receivers.OnUpgradeReceiver">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>

我尝试了带有 DATA 部分但没有...的接收器 list 代码,但它仍然无法正常工作!

广播接收器类
public class OnUpgradeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
final String msg="intent:"+intent+" action:"+intent.getAction();
Log.e("OLE","RECEIVEEEEEEEEEEEEEEEEEEEEEED: "+msg);
}}

APP更新部分
Process p;  
try {

//Runtime.getRuntime().exec (new String[]{"su", "-c", "pm install -r " + apkLocation + "party.net"});

// Preform su to get root privledges
p = Runtime.getRuntime().exec("su");

// Attempt to write a file to a root-only
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("/system/bin/pm install -r"+apkLocation+"\n");

// Close the terminal
os.writeBytes("exit\n");
os.flush();
try {
p.waitFor();
if (p.exitValue() != 255) {
Log.e("OLE","Sucess :-)");
}
else {
Log.e("OLE","Fail 1");
}

} catch (InterruptedException e) {
Log.e("OLE","Fail 2");
}
} catch (IOException e) {
Log.e("OLE","Fail 3 "+e.getMessage());
}

解决了!
问题是安装在前一个版本之上的新版本没有设置广播接收器!!!

最佳答案

如果新应用没有运行,则无法接收新应用的 Intent ,最好的解决方案是使用另一个应用-B 接收 Intent 并运行新应用-A。

关于android - 广播接收器 MY_PACKAGE_REPLACED 从未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39024683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com