1

我正在使用单机器人。当 PACKAGE_REMOVED 操作被捕获时,我不断收到 java.lang.ClassNotFoundException 错误。我在 stackflow 和其他网站上搜索并尝试了很多东西,但无法正常工作。任何帮助,将不胜感激。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly">
<uses-sdk android:targetSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/Icon" android:label="App Store">
<receiver android:name=".PackageChangeReceiver" android:exported="true" android:enabled="true">
  <intent-filter android:priority="999">
    <action android:name="android.intent.action.PACKAGE_REMOVED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="package" />
  </intent-filter>
</receiver>
</application>
</manifest>

广播接收器 (PackageChangeReceiver.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System.Net;
using System.IO;
using Android.Util;

namespace AppStore
{
[BroadcastReceiver]
public class PackageChangeReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        if ("android.intent.action.PACKAGE_REMOVED".Equals(intent.Action))
        {
            Boolean replacing = intent.GetBooleanExtra(Intent.ExtraReplacing, false);
            if (replacing)
            {
                //do nothing because will be reinstalled again
            }
            else
            {
                Intent pushIntent = new Intent(context, typeof(UpdatesService));
                pushIntent.PutExtra("appname", intent.Data.ToString());
                context.StartService(pushIntent);  
            }
        }
    }
}
}
4

1 回答 1

0

我直接联系了 Xamarin ( Monodroid )。看来我的错误是手动编辑清单。我进行了网络搜索以寻找解决方案并将条目添加到清单中。但是,这与 monodroid 代码无关。由于 monodroid 会自动构建清单,因此您必须在广播接收器上使用属性,如下所示:

[BroadcastReceiver] 
[IntentFilter(new string[] { Intent.ActionPackageRemoved }, Priority = (int)IntentFilterPriority.HighPriority, DataScheme="package")] 
public class PackageChangeReceiver : BroadcastReceiver 
{

希望这对其他人有帮助。

于 2012-11-02T15:21:55.300 回答