0

Call Directory Extension を使用して、iOS 10 のアプリで電話番号をブロックする方法の Xamarin の例に従っています (完全な例はこちら)。

以下は、ブロックする電話番号を追加するコードです (Xamarin の例に基づく)。

bool AddBlockingPhoneNumbers(CXCallDirectoryExtensionContext context)
{
    // This logging works, log written to database.
    _logService.Log("Start adding numbers");

    // Hardcoding phone numbers to add works.
    var phones = new List<Phone> { 
        new Phone { 
            PhoneNumber = 14085555555, 
            CompanyName = "Bjarte" } 
    };

    // When I uncomment the following line, the 
    // extension crashes here, I never get to the
    // logging below.
    //List<Phone> phones = _phoneService.GetPhones();

    foreach (var phone in phones)
    {
        context.AddBlockingEntry(phone.PhoneNumber);
    }

    _logService.Log("Finished adding numbers");
    return true;
}

アプリと拡張機能の間で通信するために、共有ディレクトリを使用してアプリ グループをセットアップしました。ここに、アプリと拡張機能の両方が正常に書き込むことができる SQLite データベースがあります。たとえば、拡張機能を直接デバッグできないため、ロギングに使用します。

このデータベースには、ブロックしたい電話番号があります。

データベースから電話番号を取得する方法は次のとおりです。NuGet パッケージsqlite-netを使用しています。

public List<Phone> GetPhones()
{
    var phones = new List<Phone>();

    using (var db = new SQLiteConnection(DbHelper.DbPath()))
    {
        var phoneTable = db.Table<Phone>().OrderBy(x => x.PhoneNumber);
        foreach (var phone in phoneTable)
        {
            phones.Add(new Phone
            {
                PhoneNumber = phone.PhoneNumber,
                CompanyName = phone.CompanyName
            });
        }
    }

    return phones;
}

これまでのところ、電話番号を AddBlockingPhoneNumbers メソッドにハードコーディングした場合にのみ、電話番号をブロックすることができました。

外部ソースから電話番号を取得できた人はいますか? データベース、ファイル、または何か?

4

2 に答える 2

0

理由はわかりませんが、アプリの拡張機能は sqlite データベースからデータを読み取ることができず、書き込むことしかできません。私の勝手な推測では、拡張機能にはアプリよりも許可されている操作の制限がはるかに厳しいためです。

ただし、データベースをプレーン テキスト ファイルに置き換えると、ファイルが十分に小さければ機能します。

電話番号のリストを、それぞれに 1000 個の電話番号を含む個別のファイルに分割しています。うまくいくようです。

于 2016-11-15T11:54:07.627 に答える