我正在开发一个非公开的Android应用,即该应用将无法在全球Android电子市场中使用.该应用程序将安装在有限数量的客户端上,例如通过使用apk文件.我在SD卡中有一个.apk,我正在尝试从我的应用程序更新我的应用程序.为此,我正在使用意图
我的守则
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()+"/" +"Test.apk")), "application/vnd.android.package-archive");
startActivity(intent);
注意:它工作正常,但更新后,应用程序将被关闭.
问题是“如何防止这种情况?”
我也使用广播接收器重新打开我的应用程序
public class AutoStart extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Intent i = new Intent(context, ABCActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}else{
Intent i = new Intent(context, XYZActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
问题
1: – 无法重新打开活动时
“android.intent.action.PACKAGE_ADDED”
“android.intent.action.PACKAGE_INSTALL”
“android.intent.action.PACKAGE_CHANGED”
android:name=".AutoStart"
android:enabled="true"
android:exported="true" >
“android.intent.action.BOOT_COMPLETED”正常工作
权限给定
1 >
2 >
3 >
解决方法:
遗憾的是,你不能阻止进程在重新安装时被终止,而另一方面 – 如果你自己的应用程序在那时重新安装,你将永远不会收到任何广播.
如果我必须实现这样的功能,我会解决这个问题:
技巧1:
只创建另一个应用程序(也会以某种方式安装在用户的设备上)它只会像“看门狗”一样:这个应用程序会听安装广播,因为它是不同的应用程序然后是那个安装 – 启动“原始应用程序”没有问题.
当然不要忘记用户将需要“启动”至少一个这个看门狗应用程序,因为从Android 4接收器将无法工作,直到应用程序进程至少开始.这是出于安全原因..
技巧2:
另一种选择是在清单中注册你的应用程序也是ACTION_TIME_TICK广播.你可以指望这个广播被调用每个秒数,并在它收到一些逻辑时实现,这些逻辑识别现在的应用程序是否需要启动主要活动.
这种方法会起作用,但是从表演的原因来看并不是那么好 – 因为你的应用程序流程几乎一直都会活着,因为它会对那个广播作出反应.如果你不在乎 – 所以这不是问题
技巧3:
在您开始安装活动之前的30-50秒之前,将pendingIntent提供给alarmManager.待处理的意图将有意重新启动您的应用程序.
假设应用程序将安装到那时 – 它会工作.
标签:android,android-intent,broadcastreceiver
来源: https://codeday.me/bug/20190718/1492553.html