Xamarin 项目中具有 BOOT_COMPLETED 操作的 BroadcastReceiver 的正确设置是什么?
What is the correct setting of BroadcastReceiver with BOOT_COMPLETED action in Xamarin project?
我创建了一个简单示例来测试 BroadcastReceiver
对 BOOT_COMPLETED
操作的反应。下面,但它不工作。启动平板电脑后没有 activity / 应用程序是 运行ning 并且在 logocat 中什么也没有。应该是我的设置有误,但是我查不出是什么
我使用平板电脑 alps 874v3 android 4.4.2 和 Visual Studio 2010 以及 Xamarin 在 .net 中编写 Android 应用程序
在 SO 上我发现了一些额外的信息:
1 注册 BroadcastReceiver
未在 AndroidManifest.xml 内,但必须使用 class 属性。
2 应用程序必须包含 BroadcastReceiver
和 activity
否则将不会 运行 在更高版本的 Android 上(为了安全)
3 安装后,应用程序处于停止状态,所以我启动它(系统验证用户是否需要该应用程序)然后终止,然后我尝试重新启动。
[BroadcastReceiver(Enabled = true, Exported = true, Permission = "RECEIVE_BOOT_COMPLETED")]
[IntentFilter(new string[] { "android.intent.action.BOOT_COMPLETED"})]
public class BootBroadcastReceiver : BroadcastReceiver
{
public BootBroadcastReceiver()
{
}
public override void OnReceive(Context context, Intent intent)
{
Log.Debug("TestBoot", "BootBroadcastReceiver.OnReceive()");
context.StartActivity(typeof(UsbMainActivity));
Log.Debug("TestBoot", "BootBroadcastReceiver.OnReceive() after start activity");
}
}
[Activity(Label = "UsbMainActivity", Icon = "@drawable/icon", MainLauncher = true, Permission = "RECEIVE_BOOT_COMPLETED")]
[IntentFilter(new string[] { "android.intent.action.BOOT_COMPLETED" })]
public class UsbMainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
Utils.MyLog("TestBoot", 1, "UsbMainActivity.OnCreate()");
}
}
有一个 AndroidMainfest.xml 由 xamarin 生成:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="TestBoot.TestBoot" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="19" />
<application android:label="TestBoot" android:icon="@drawable/icon" android:name="mono.android.app.Application" android:debuggable="true">
<activity android:icon="@drawable/icon" android:label="UsbMainActivity" android:permission="RECEIVE_BOOT_COMPLETED" android:name="md5e98891b9b152ca725e5cab653b1387f3.UsbMainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</activity>
<receiver android:enabled="true" android:exported="true" android:permission="RECEIVE_BOOT_COMPLETED" android:name="md5e98891b9b152ca725e5cab653b1387f3.BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<provider android:name="mono.MonoRuntimeProvider" android:exported="false" android:initOrder="2147483647" android:authorities="TestBoot.TestBoot.mono.MonoRuntimeProvider.__mono_init__" />
<receiver android:name="mono.android.Seppuku">
<intent-filter>
<action android:name="mono.android.intent.action.SEPPUKU" />
<category android:name="mono.android.intent.category.SEPPUKU.TestBoot.TestBoot" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>
将此权限添加到清单
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
问题是在安装应用程序后我通过设置停止- "Force Quit" 然后尝试重新启动。如果我安装后只停了一个activity,那么重启后就到了boot_completed。所以似乎 应用程序必须 运行 在重启之前 然后 boot_completed 到达。
注意:通过 adb 控制台测试重启,键入:
亚行 shell
我在广播-a android.intent.action.BOOT_COMPLETED
在某些设备上声明权限两次,一次在清单中,第二次作为接收器的属性将使接收器无法工作。您只能保留清单中声明的权限。在这个线程中查看我的评论 (GeorgiZ):https://forums.xamarin.com/discussion/80876/open-an-app-on-startup-after-booting-not-working.
我创建了一个简单示例来测试 BroadcastReceiver
对 BOOT_COMPLETED
操作的反应。下面,但它不工作。启动平板电脑后没有 activity / 应用程序是 运行ning 并且在 logocat 中什么也没有。应该是我的设置有误,但是我查不出是什么
我使用平板电脑 alps 874v3 android 4.4.2 和 Visual Studio 2010 以及 Xamarin 在 .net 中编写 Android 应用程序
在 SO 上我发现了一些额外的信息:
1 注册 BroadcastReceiver
未在 AndroidManifest.xml 内,但必须使用 class 属性。
2 应用程序必须包含 BroadcastReceiver
和 activity
否则将不会 运行 在更高版本的 Android 上(为了安全)
3 安装后,应用程序处于停止状态,所以我启动它(系统验证用户是否需要该应用程序)然后终止,然后我尝试重新启动。
[BroadcastReceiver(Enabled = true, Exported = true, Permission = "RECEIVE_BOOT_COMPLETED")]
[IntentFilter(new string[] { "android.intent.action.BOOT_COMPLETED"})]
public class BootBroadcastReceiver : BroadcastReceiver
{
public BootBroadcastReceiver()
{
}
public override void OnReceive(Context context, Intent intent)
{
Log.Debug("TestBoot", "BootBroadcastReceiver.OnReceive()");
context.StartActivity(typeof(UsbMainActivity));
Log.Debug("TestBoot", "BootBroadcastReceiver.OnReceive() after start activity");
}
}
[Activity(Label = "UsbMainActivity", Icon = "@drawable/icon", MainLauncher = true, Permission = "RECEIVE_BOOT_COMPLETED")]
[IntentFilter(new string[] { "android.intent.action.BOOT_COMPLETED" })]
public class UsbMainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
Utils.MyLog("TestBoot", 1, "UsbMainActivity.OnCreate()");
}
}
有一个 AndroidMainfest.xml 由 xamarin 生成:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="TestBoot.TestBoot" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="19" />
<application android:label="TestBoot" android:icon="@drawable/icon" android:name="mono.android.app.Application" android:debuggable="true">
<activity android:icon="@drawable/icon" android:label="UsbMainActivity" android:permission="RECEIVE_BOOT_COMPLETED" android:name="md5e98891b9b152ca725e5cab653b1387f3.UsbMainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</activity>
<receiver android:enabled="true" android:exported="true" android:permission="RECEIVE_BOOT_COMPLETED" android:name="md5e98891b9b152ca725e5cab653b1387f3.BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<provider android:name="mono.MonoRuntimeProvider" android:exported="false" android:initOrder="2147483647" android:authorities="TestBoot.TestBoot.mono.MonoRuntimeProvider.__mono_init__" />
<receiver android:name="mono.android.Seppuku">
<intent-filter>
<action android:name="mono.android.intent.action.SEPPUKU" />
<category android:name="mono.android.intent.category.SEPPUKU.TestBoot.TestBoot" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>
将此权限添加到清单
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
问题是在安装应用程序后我通过设置停止- "Force Quit" 然后尝试重新启动。如果我安装后只停了一个activity,那么重启后就到了boot_completed。所以似乎 应用程序必须 运行 在重启之前 然后 boot_completed 到达。
注意:通过 adb 控制台测试重启,键入: 亚行 shell 我在广播-a android.intent.action.BOOT_COMPLETED
在某些设备上声明权限两次,一次在清单中,第二次作为接收器的属性将使接收器无法工作。您只能保留清单中声明的权限。在这个线程中查看我的评论 (GeorgiZ):https://forums.xamarin.com/discussion/80876/open-an-app-on-startup-after-booting-not-working.