我正在尝试创建一个以设备启动开始的简单服务。事情是设备返回消息“不幸的是,[app_name]已停止。”
我几个小时都在努力解决这个问题,寻找错误,但这太简单了。希望,你们可以帮我解决这个问题。
这是我的代码:
的AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application android:allowBackup="true" android:label="@string/app_name">
<receiver android:name=".StartReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<service android:name=".PService" />
</application>
StartReceiver.cs
[BroadcastReceiver]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class StartReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
Intent startIntent = new Intent(context, typeof(PService));
context.StartService(startIntent);
}
}
最后是PService.cs
[Service]
public class PService : Service
{
public override void OnCreate()
{
base.OnCreate();
}
public override IBinder OnBind(Intent intent)
{
return null;
}
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
Toast.MakeText(this, "Start", ToastLength.Short).Show();
return StartCommandResult.Sticky;
}
public override void OnDestroy()
{
base.OnDestroy();
Toast.MakeText(this, "Stop", ToastLength.Short).Show();
}
}
此附加服务应用程序的目标是API 19(4.4.2 KitKat)Android版本。
我认为我会犯很小的错误,但我真的无法找到它......提前感谢您的帮助。
答案 0 :(得分:6)
通过在清单中添加接收器并通过BroadcastReceiverAttribute,您的清单中有两个接收器。另外,清单中的那个将无法工作,因为它不是默认情况下Xamarin创建的基于MD5的Java名称。
1)从清单中删除接收者和启动权限
2)通过属性添加启动权限)
[assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
3)通过属性添加清单条目:
[BroadcastReceiver(Enabled = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class BootBroadcastReceiver : BroadcastReceiver
1)添加引导权限的清单条目
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
2)添加接收器并使用完全限定的Java类名:
<receiver android:name="com.yourpackagename.app.BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
3)为Name
添加BroadcastReceiverAttribute
参数,以获取您在清单中使用的完全限定的Java类名称
[BroadcastReceiver(Name = "com.yourpackagename.app.BootBroadcastReceiver", Enabled = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class BootBroadcastReceiver : BroadcastReceiver
答案 1 :(得分:0)
我找到了解决该问题的另一种方法,
请确保您的BootBroadcastReceiver存在于 Yourproject.Android.csproj 文件
中<ItemGroup>
<Compile Include="MainActivity.cs" />
<Compile Include="Provider\AppVersionProvider.cs" />
<Compile Include="Resources\Resource.Designer.cs" />
<Compile Include="Properties\BootBroadcastReceiver.cs" />
<Compile Include="others_staf" />
然后查看SushiHangover的答案。