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 メソッドにハードコーディングした場合にのみ、電話番号をブロックすることができました。
外部ソースから電話番号を取得できた人はいますか? データベース、ファイル、または何か?