无法向已关闭的应用发送广播
Unable to send broadcast to closed app
我们开发了一个需要第二个应用程序(专业密钥应用程序)来验证其许可证的应用程序。主要(免费应用程序)通过广播请求专业密钥应用程序检查许可证。
问题是当pro key应用程序关闭时它永远不会收到主应用程序发送的广播,为了解决这个问题我必须先打开pro key应用程序然后再次尝试验证许可证。
主应用程序发送它的方式如下:
public static void checkLicense(Context context) {
...
Intent checkLicenseIntent = new Intent(Constants.CHECK_LICENSE_INTENT);
context.sendBroadcast(checkLicenseIntent);
...
}
这是专业密钥应用程序的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ar.com.myapp.prokey"
android:versionCode="2"
android:versionName="1.0.0.1" >
<permission
android:name="ar.com.myapp.prokey.CheckLicense"
android:protectionLevel="signature" />
<uses-permission android:name="ar.com.myapp.ReceiveLicenseCheckResponse" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ar.com.myapp.prokey.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="ar.com.myapp.prokey.CheckLicenseReceiver"
android:permission="ar.com.myapp.prokey.CheckLicense" >
<intent-filter >
<action android:name="ar.com.myapp.prokey.CHECK_LICENSE" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</receiver>
<service android:name="ar.com.myapp.prokey.LicenseVerificationService" />
</application>
</manifest>
这是应用程序交流的方式吗?广播是否应该唤醒关键的专业应用程序?
有什么想法吗?
Should the broadcast wake up the key pro app or not?
如果 "wake up" 你的意思是 "fork a process for it",那么是的,一旦你修复了 <intent-filter>
,它将通过摆脱两个 <category>
元素,作为您正在广播的 Intent
没有类别。类别很少与广播一起使用。
如果您的应用处于 "stopped" 状态,它将无法接收任何 Intent。您需要通过激活其任何组件来 "activate" 该应用程序。如果您在广播的意图上使用 setComponent(),系统将在发送意图之前激活应用程序。
将此行添加到您的代码中:
Intent checkLicenseIntent = new Intent(Constants.CHECK_LICENSE_INTENT);
checkLicenseIntent.setComponent(new ComponentName("ar.com.myapp.prokey", "ar.com.myapp.prokey.CheckLicenseReceiver"));
context.sendBroadcast(checkLicenseIntent);
您可以阅读这篇文章的更多内容:https://devmaze.wordpress.com/2011/12/05/activating-applications/
我们开发了一个需要第二个应用程序(专业密钥应用程序)来验证其许可证的应用程序。主要(免费应用程序)通过广播请求专业密钥应用程序检查许可证。 问题是当pro key应用程序关闭时它永远不会收到主应用程序发送的广播,为了解决这个问题我必须先打开pro key应用程序然后再次尝试验证许可证。
主应用程序发送它的方式如下:
public static void checkLicense(Context context) {
...
Intent checkLicenseIntent = new Intent(Constants.CHECK_LICENSE_INTENT);
context.sendBroadcast(checkLicenseIntent);
...
}
这是专业密钥应用程序的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ar.com.myapp.prokey"
android:versionCode="2"
android:versionName="1.0.0.1" >
<permission
android:name="ar.com.myapp.prokey.CheckLicense"
android:protectionLevel="signature" />
<uses-permission android:name="ar.com.myapp.ReceiveLicenseCheckResponse" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ar.com.myapp.prokey.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="ar.com.myapp.prokey.CheckLicenseReceiver"
android:permission="ar.com.myapp.prokey.CheckLicense" >
<intent-filter >
<action android:name="ar.com.myapp.prokey.CHECK_LICENSE" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</receiver>
<service android:name="ar.com.myapp.prokey.LicenseVerificationService" />
</application>
</manifest>
这是应用程序交流的方式吗?广播是否应该唤醒关键的专业应用程序? 有什么想法吗?
Should the broadcast wake up the key pro app or not?
如果 "wake up" 你的意思是 "fork a process for it",那么是的,一旦你修复了 <intent-filter>
,它将通过摆脱两个 <category>
元素,作为您正在广播的 Intent
没有类别。类别很少与广播一起使用。
如果您的应用处于 "stopped" 状态,它将无法接收任何 Intent。您需要通过激活其任何组件来 "activate" 该应用程序。如果您在广播的意图上使用 setComponent(),系统将在发送意图之前激活应用程序。
将此行添加到您的代码中:
Intent checkLicenseIntent = new Intent(Constants.CHECK_LICENSE_INTENT);
checkLicenseIntent.setComponent(new ComponentName("ar.com.myapp.prokey", "ar.com.myapp.prokey.CheckLicenseReceiver"));
context.sendBroadcast(checkLicenseIntent);
您可以阅读这篇文章的更多内容:https://devmaze.wordpress.com/2011/12/05/activating-applications/