2016-05-09 12 views
3

私は、ユーザーがアプリケーションの連絡先にユーザーを追加できるアプリケーションを作成しています。Androidでインテントを使用して連絡先を追加する

Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION); 
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE); 
intent.putExtra(ContactsContract.Intents.Insert.PHONE, bean.getMobileNo()); 
intent.putExtra(ContactsContract.Intents.Insert.NAME, bean.getName()); 
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, bean.getEmailID()); 
startActivity(intent); 

ので、それが接触画面を追加することになり、ユーザーがボタンを背面押した場合の接触は、ユーザーが連絡先を保存したくない場合であっても救われたとき、それは問題で問題ではありません加えます。

私はアプリケーションからではなく、インテントを使用してこれを行いたいと思います。このためのソリューションはありますか、それともデバイス固有ですか?

+0

@Shailesh連絡先を追加する必要があるからです。アプリから連絡先を追加できます。 –

+1

コードが正しいです。一部のデバイスのデフォルトの連絡先アプリがこれを実行しました。あなたは破棄したり、保存したりします。 –

答えて

0

は、この5月には、あなたを助け

// Declare 
static final int PICK_CONTACT = 1; 

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 

startActivityForResult(intent, PICK_CONTACT); 

//code 
@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 

    switch (reqCode) { 
     case (PICK_CONTACT): 
      if (resultCode == Activity.RESULT_OK) { 

       Uri contactData = data.getData(); 
       Cursor c = managedQuery(contactData, null, null, null, null); 
       if (c.moveToFirst()) { 
        String id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

        String hasPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

        if (hasPhone.equalsIgnoreCase("1")) { 
         Cursor phones = getContentResolver().query(
           ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
           ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, 
           null, null); 
         phones.moveToFirst(); 
         cNumber = phones.getString(phones.getColumnIndex("data1")); 
         System.out.println("number is:" + cNumber); 
        } 
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 


       } 
      } 
      break; 
    } 
} 

、これを試してみてください。

+0

@Satish上記のコードは、私の連絡先から連絡を取るのに役立ちます。 –

3

私が正しくあなたのポストを理解していれば、問題はそれに関係なく、もしある予め充填された情報 */

Intent intent = new Intent(Intent.ACTION_INSERT); 
intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 

intent.putExtra(ContactsContract.Intents.Insert.NAME, bean.getName()); 
intent.putExtra(ContactsContract.Intents.Insert.PHONE, bean.getMobileNo()); 
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, bean.getEmailID()); 

context.startActivity(intent); 
+0

それは私にとってはうまくいきませんでした。押したときにも連絡先が保存されます。 –

+0

@HarshadPawar Nexus 7とHTCデバイスでこのコードに問題はありません。どのデバイスをテストに使用したか分かりますか? – Shailesh

+0

私は、5.1.1、s5、およびgg4のopoが直接保存するopo 6.0、opo 5.1.1、lg g4、samsung s5、note 5、S6を持っています。 –

0

とアドオンの接触画面を開く*/** この

をお試しくださいユーザーが連絡先を追加するかどうかは、連絡先情報はとにかく追加されます。

私が気付いたように、連絡先を保存しているstartActivity(intent)が既に呼び出されています。ユーザーが連絡先を追加することを既に承認または確認している場合にのみstartActivity(intent)を実行してください。確認のためDialogを使用することをお勧めします。ユーザーが受け入れる場合はstartActivity(intent)を実行し、そうでなければアクションを無視します。ように:

 if (true){ // user accepts 
      Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION); 
      intent.setType(ContactsContract.RawContacts.CONTENT_TYPE); 
      intent.putExtra(ContactsContract.Intents.Insert.PHONE, bean.getMobileNo()); 
      intent.putExtra(ContactsContract.Intents.Insert.NAME, bean.getName()); 
      intent.putExtra(ContactsContract.Intents.Insert.EMAIL, bean.getEmailID()); 
      startActivity(intent); 
     } else { 
      // your code here. 
     } 

私はこのpostもあなたにとって役に立ちます。乾杯! :

+0

はい、そうかもしれません..しかし、電話機では、私が後ろを押すと破棄の確認が表示され、一部の電話機では連絡先が直接保存されます。 –

+0

これは奇妙です。私がリンクしている投稿を使っても? 'ContentResolver'を使う? –

関連する問題