1

モノドロイドを使用しています。PACKAGE_REMOVED アクションがトラップされると、java.lang.ClassNotFoundException エラーが発生し続けます。スタックフローや他のサイトで多くのことを検索して試みましたが、これを機能させることができません。どんな助けでも大歓迎です。

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) に直接連絡しました。マニフェストを手動で編集するのが私の間違いだったようです。解決策を探して Web 検索を行い、マニフェストにエントリを追加しました。しかし、これはモノドロイドのコードとはつながりませんでした。monodroid はマニフェストを自動ビルドするため、次のようにブロードキャスト レシーバーで属性を使用する必要があります。

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

これが他の人に役立つことを願っています。

于 2012-11-02T15:21:55.300 に答える