Grz*_* G. 4 c# service android visual-studio xamarin
我正在尝试创建一个以设备启动开始的简单服务.事情是设备返回消息"不幸的是,[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>
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
最后是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();
}
}
Run Code Online (Sandbox Code Playgroud)
此附加服务应用程序的目标是API 19(4.4.2 KitKat)Android版本.
我认为我会犯很小的错误,但我真的无法找到它..提前感谢任何帮助.
通过在清单中添加接收器并通过BroadcastReceiverAttribute,您的清单中有两个接收器.另外,清单中的那个不会起作用,因为它不是默认情况下Xamarin创建的基于MD5的Java名称.
1)从清单中删除接收方和引导权限
2)通过属性添加启动权限)
[assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
Run Code Online (Sandbox Code Playgroud)
3)通过属性添加清单条目:
[BroadcastReceiver(Enabled = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class BootBroadcastReceiver : BroadcastReceiver
Run Code Online (Sandbox Code Playgroud)
1)添加引导权限的清单条目
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Run Code Online (Sandbox Code Playgroud)
2)添加接收器并使用完全限定的Java类名:
<receiver android:name="com.yourpackagename.app.BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
3)为清单中使用的完全限定Java类名添加Name
参数BroadcastReceiverAttribute
[BroadcastReceiver(Name = "com.yourpackagename.app.BootBroadcastReceiver", Enabled = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class BootBroadcastReceiver : BroadcastReceiver
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1244 次 |
最近记录: |