我的应用程序不在Play商店上验证在网络上如果有新版本并下载并启动它.安装完毕后,我想重新启动应用程序,我会用一个BroadcastRecevier带ACTION_PACKAGE_REPLACED.这是代码:
广播:
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)){
ApplicationInfo app = new ApplicationInfo();
if(app.packageName.equals("it.android.downloadapk")){
Intent LaunchIntent = context.getPackageManager().getLaunchIntentForPackage(app.packageName);
context.startActivity(LaunchIntent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
表现:
<receiver android:name="it.android.downloadapk.Broadcast">
<intent-filter>
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED"></action>
<data android:scheme="package" android:path="it.android.downloadapk" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
问题是,当我安装新的apk时,广播似乎没有启动,为什么?
我目前在Android市场上有两个版本的应用程序,一个付费版本和一个免费版本.但我希望将应用内结算功能集成到我的免费应用程序中,并在订阅基础上向客户收费,价格低于付费应用的当前价格.
但是我应该如何为现有客户处理这个问题呢?让他们再次支付使用付费功能似乎是不公平的,而他们是我的应用程序的早期采用者.理想情况下,我实现的东西将使现有用户可以访问我的免费应用程序中的解锁功能.
有关如何实现这一目标的任何想法?一个好的方法概述是足够的,我不介意做一些关于如何实际实现这种方法的研究.
升级我的应用程序后,我希望该服务在以前运行时重新启动.有没有办法做到这一点?我没有看到任何我可以在清单中注册的广播意图.
当我的 Android 应用程序仅更新时(我特别想重新安排闹钟),我需要运行特定的代码。
他们对 SO 进行了广泛的搜索,我发现人们建议使用 SharedPreferences。我认为这是不正确的,因为可以在重新启动时或通过简单地清除缓存来删除共享首选项。这意味着当我的应用程序更新时,共享首选项可能不存在,我可能不知道它是更新还是只是全新安装(或更糟糕的是重新启动)。
那么,还有其他办法吗?也许是某种意图或某种执行方法(有点像 sqlite 的 onUpgrade)。
请指教 。太感谢了
我正在尝试设置一项服务,以检查何时在设备中安装了新的活动更新.我已经在应用程序活动中完成了这一操作Broadcastreceiver,在清单中声明它并且它完美地运行.
但是,当我尝试在服务中运行该接收器并动态声明它时,我onReceive永远不会被调用.这是我的服务代码:
public class UpdateService extends Service {
private static String mPackage = "com.my.package";
private static String mActivityName = "myActivity";
private BroadcastReceiver mUpdateReceiver;
@Override
public void onCreate() {
super.onCreate();
mUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("mTag","In the BroadcastReceiver onReceive()");
if (intent.getAction().equalsIgnoreCase(Intent.ACTION_PACKAGE_REPLACED)) {
// Log that a new update is has been found
Log.d("mTag","New version of the app has been installed.");
Log.d("mTag", "Intent data: " + intent.getDataString());
Log.d("mTag","My package: " …Run Code Online (Sandbox Code Playgroud) 我们希望 Android 自动连接到我们定制的 BLE 外设。
我们的外设应定期(但不频繁)进行广告并尝试向手机指示一些时间敏感的传感器数据。因此我们希望手机随时可以连接。
通常,您可以将智能手表与 Android 配对,然后只要智能手表在范围内,Android 就会自动连接到智能手表。所以我们相信我们的用例应该是可行的。
我读了很多答案,建议在连接时将“autoconnect”参数设置为 true。我已经尝试过了,重新启动后,甚至在 Android 上禁用并重新启用蓝牙后,重新连接都不会持续。Brian 的回答说我应该在后台扫描,但 Android 使这变得不切实际。如果我使用前台服务,我的用户会讨厌该应用程序。如果我使用后台服务,我可能会在Android 打瞌睡期间错过外围设备的连接尝试,并且代码容易出错。
理想情况下,我想做一些像埃米尔在他的回答中所说的那样的事情。请阅读后续问题和答复。
但是,我们无法通过 Android 的蓝牙设置看到我们的应用程序。我们只能使用我们的应用程序(或 nrf Connect)连接到外围设备并与其配对。无奈之下,我尝试修改外设的广告标志。然后我就可以在 Android 的蓝牙设置中看到它。但是,当我尝试使用 Android 设置进行配对时,尝试失败,因为外围设备未处于“配对模式”。
我们正在构建应用程序和外围设备,因此我们可以更改两者。我想知道我们的用例是否可行以及我们需要做什么才能使其发挥作用。我们使用 STM32WB 作为我们的外设。
android bluetooth stm32 bluetooth-lowenergy android-bluetooth