contentProviderResults を返す新しい連絡先をプログラムで追加しています。
contentProviderResults から連絡先の URi を取得し、に渡します。Intent.action_view
Uri newContactUri = contentProviderResults[0].uri;
Log.i("contact", "New contact Uri is " + newContactUri);
Intent intent = new Intent(Intent.ACTION_VIEW, newContactUri);
私が直面している問題は、Samsung (OS < 4.0 を実行) を除くすべてのデバイス、つまり ICS の前身であるデバイスで完全に動作することです。
Samsung 4.0 より前のデバイスでは、コア プロセスが停止し、強制終了ダイアログが表示されます。
残念ながら、process.android.process.acore が停止しました ...
コンタクト挿入後に受け取るサンプルウリは
01-01 06:25:40.233: I/contact(2803): New contact Uri is content://com.android.contacts/raw_contacts/56
以下は、連絡先を追加し、追加された連絡先の詳細を表示する私の方法です。
public void insertContact(Context context, String displayName,
String mobileNumber) {
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
displayName).build());
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
mobileNumber)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build());
try {
final ContentProviderResult[] contentProviderResults = context
.getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops);
if (contentProviderResults != null
&& contentProviderResults[0] != null) {
Toast.makeText(context, "Contact Added Successfully",
Toast.LENGTH_LONG).show();
for (int i = 0; i < contentProviderResults.length; i++)
Log.i("contact", "" + contentProviderResults[i].uri);
Uri newContactUri = contentProviderResults[0].uri;
Log.i("contact", "New contact Uri is " + newContactUri);
Intent intent = new Intent(Intent.ACTION_VIEW, newContactUri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "Exception: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
このコードが Samsung デバイス (Pre 4.0 バージョン) で失敗する理由を教えてください。
以下はクラッシュログです。
01-01 06:25:40.978: E/AndroidRuntime(2894): FATAL EXCEPTION: main
01-01 06:25:40.978: E/AndroidRuntime(2894): java.lang.RuntimeException: Unable to resume activity {com.android.contacts/com.sec.android.app.contacts.PhoneBookDetailTabActivity}: java.lang.IllegalArgumentException: Invalid column lookup
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.os.Handler.dispatchMessage(Handler.java:99)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.os.Looper.loop(Looper.java:123)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-01 06:25:40.978: E/AndroidRuntime(2894): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 06:25:40.978: E/AndroidRuntime(2894): at java.lang.reflect.Method.invoke(Method.java:521)
01-01 06:25:40.978: E/AndroidRuntime(2894): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-01 06:25:40.978: E/AndroidRuntime(2894): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-01 06:25:40.978: E/AndroidRuntime(2894): at dalvik.system.NativeStart.main(Native Method)
01-01 06:25:40.978: E/AndroidRuntime(2894): Caused by: java.lang.IllegalArgumentException: Invalid column lookup
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.database.sqlite.SQLiteQueryBuilder.computeProjection(SQLiteQueryBuilder.java:523)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.database.sqlite.SQLiteQueryBuilder.buildQuery(SQLiteQueryBuilder.java:370)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:323)
01-01 06:25:40.978: E/AndroidRuntime(2894): at com.android.providers.contacts.ContactsProvider2.query(ContactsProvider2.java:7846)
01-01 06:25:40.978: E/AndroidRuntime(2894): at com.android.providers.contacts.ContactsProvider2.query(ContactsProvider2.java:7831)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.content.ContentProvider$Transport.query(ContentProvider.java:163)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.content.ContentResolver.query(ContentResolver.java:245)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.provider.ContactsContract$Contacts.getLookupUri(ContactsContract.java:916)
01-01 06:25:40.978: E/AndroidRuntime(2894): at com.sec.android.app.contacts.PhoneBookDetailTabActivity.startQuery(PhoneBookDetailTabActivity.java:522)
01-01 06:25:40.978: E/AndroidRuntime(2894): at com.sec.android.app.contacts.PhoneBookDetailTabActivity.onResume(PhoneBookDetailTabActivity.java:361)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.Activity.performResume(Activity.java:3823)
01-01 06:25:40.978: E/AndroidRuntime(2894): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
01-01 06:25:40.978: E/AndroidRuntime(2894): ... 12 more