标签:android android-intent broadcastreceiver
我正在开发一个非公开的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”
<receiver
android:name=".AutoStart"
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,android-intent,broadcastreceiver 来源: https://codeday.me/bug/20190718/1492553.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。