我正在开发一个非公开的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 @R_404_6843@Start extends broadcastReceiver{@OverrIDepublic 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”
<receiver androID:name=".@R_404_6843@Start" androID:enabled="true" androID:exported="true" > <intent-filter androID:priority="100" > <action androID:name="androID.intent.action.BOOT_COMPLETED" /> </intent-filter> <intent-filter> <action androID:name="androID.intent.action.PACKAGE_ADDED" /> <data androID:scheme="package" /> </intent-filter> <intent-filter> <action androID:name="androID.intent.action.PACKAGE_INSTALL" /> <data androID:scheme="package" /> </intent-filter> <intent-filter> <action androID:name="androID.intent.action.PACKAGE_CHANGED" /> <data androID:scheme="package" /> </intent-filter> <intent-filter> <action androID:name="androID.intent.action.PACKAGE_REPLACED" /> <data androID:scheme="package" /> </intent-filter> </receiver>
“androID.intent.action.BOOT_COMPLETED”正常工作
权限给定
1 > <uses-permission androID:name="androID.permission.RECEIVE_BOOT_COMPLETED" />2 > <uses-permission androID:name="androID.permission.RESTART_PACKAGES" />3 > <uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" />
解决方法:
遗憾的是,你不能阻止进程在重新安装时被终止,而另一方面 – 如果你自己的应用程序在那时重新安装,你将永远不会收到任何广播.
如果我必须实现这样的功能,我会解决这个问题:
技巧1:
只创建另一个应用程序(也会以某种方式安装在用户的设备上)它只会像“看门狗”一样:这个应用程序会听安装广播,因为它是不同的应用程序然后是那个安装 – 启动“原始应用程序”没有问题.
当然不要忘记用户将需要“启动”至少一个这个看门狗应用程序,因为从AndroID 4接收器将无法工作,直到应用程序进程至少开始.这是出于安全原因..
技巧2:
另一种选择是在清单中注册你的应用程序也是ACTION_TIME_TICK广播.你可以指望这个广播被调用每个秒数,并在它收到一些逻辑时实现,这些逻辑识别现在的应用程序是否需要启动主要活动.
这种方法会起作用,但是从表演的原因来看并不是那么好 – 因为你的应用程序流程几乎一直都会活着,因为它会对那个广播作出反应.如果你不在乎 – 所以这不是问题
技巧3:
在您开始安装活动之前的30-50秒之前,将pendingIntent提供给alarmManager.待处理的意图将有意重新启动您的应用程序.
假设应用程序将安装到那时 – 它会工作.
总结以上是内存溢出为你收集整理的android – 更新我的App问题全部内容,希望文章能够帮你解决android – 更新我的App问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)