2012-12-09 41 views
0

我看到了很多類似的問題&在stackoverflow &答案谷歌,但沒有運氣。在嘗試從聯繫人獲取電話號碼時,onActivityResult的resultCode始終爲0。這裏是代碼,請幫助我,我會非常感謝你。 `onActivityResult的resultCode始終爲0,同時試圖從聯繫人獲取電話號碼

package april19ideas.call.blocker; 
import java.util.ArrayList; 
import java.util.Collections; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.pm.PackageManager; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.PhoneLookup; 
import android.text.InputType; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class DNDCallBlockerBlackListActivity extends ListActivity { 

private static final String TAG = "DNDCallBlockerBlackListActivity"; 
private static final int PICK_CONTACT = 3; 
private static final int PICK_LOG = 4; 
private static final String BLACKLIST_PREF = "blacklist"; 

private ArrayList<String> m_phones; 
private ArrayList<String> m_contacts; 
private LayoutInflater m_Inflater; 
private ArrayAdapter<String> m_adapter; 
private SharedPreferences settings; 
private int checkedItem; 
private Context myContext; 

/** 
* Called when the activity is first created. Responsible for initializing 
* the UI. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    myContext = this; 
    settings = PreferenceManager.getDefaultSharedPreferences(myContext); 

    PackageManager manager = getPackageManager(); 
    if (manager.checkSignatures("april19ideas.call.blocker", 
      "april19ideas.call.blocker.key") == PackageManager.SIGNATURE_MATCH) { 
     setContentView(R.layout.noad_blacklist); 
    } else { 
     setContentView(R.layout.blacklist); 
    } 

    m_Inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    m_phones = new ArrayList<String>(); 
    m_contacts = new ArrayList<String>(); 

    String tmp_phones = settings.getString(BLACKLIST_PREF, ""); 
    if (tmp_phones != "") { 
     String[] tmp_phonesArr = tmp_phones.split(", "); 
     Collections.addAll(m_phones, tmp_phonesArr); 

     for (String s : m_phones) { 
      // search contact for every saved phone number 
      ContentResolver cr = getContentResolver(); 
      Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, 
        Uri.encode(s)); 
      Cursor cur = cr.query(uri, 
        new String[] { PhoneLookup.DISPLAY_NAME }, null, null, 
        null); 
      if (cur.moveToFirst()) { 
       String name = cur.getString(cur 
         .getColumnIndex(PhoneLookup.DISPLAY_NAME)); 
       m_contacts.add(name); 
      } else { 
       m_contacts.add("N/A"); 
      } 
      cur.close(); 
     } 
    } else { 
     // do nothing, list is empty 
    } 

    // this adapter makes the black list visible to user 
    m_adapter = new ArrayAdapter<String>(this, 
      R.layout.blacklist_list_item, m_phones) { 
     @Override 
     public View getView(int position, View reusableView, 
       ViewGroup parent) { 
      View row; 

      if (reusableView == null) { 
       row = m_Inflater 
         .inflate(R.layout.blacklist_list_item, null); 
      } else { 
       row = reusableView; 
      } 

      TextView tv1 = (TextView) row.findViewById(android.R.id.text1); 
      tv1.setText(getItem(position)); 

      TextView tv2 = (TextView) row.findViewById(android.R.id.text2); 
      tv2.setText(m_contacts.get(position)); 

      return row; 
     } 
    }; 
    setListAdapter(m_adapter); 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 

    // to handle taps on list items 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       final int position, long id) { 
      // construct an alert dialog 
      AlertDialog.Builder alert = new AlertDialog.Builder(myContext); 

      // set icon, title and message 
      alert.setIcon(R.drawable.icon); 
      alert.setTitle(R.string.app_name); 
      alert.setMessage(m_phones.get(position) + " - " 
        + m_contacts.get(position)); 

      // configure two buttons 
      alert.setPositiveButton(R.string.message_remove, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int whichButton) { 
          // when OK pressed, go to paypal donations 
          // web page 
          // remove item from list 
          m_phones.remove(position); 
          m_contacts.remove(position); 
          String tmp_phones = ""; 
          if (m_phones.size() > 0) { 
           tmp_phones = m_phones.toString(); 
           tmp_phones = tmp_phones.substring(1, 
             tmp_phones.length() - 1); 
          } 
          // save updated list to sharedpreferences 
          SharedPreferences.Editor editor = settings 
            .edit(); 
          editor.putString(BLACKLIST_PREF, tmp_phones); 
          editor.commit(); 
          // refresh ui 
          m_adapter.notifyDataSetChanged(); 
          // inform user 
          String toast_text = getString(R.string.phone_removed); 
          Toast.makeText(getApplicationContext(), 
            toast_text, Toast.LENGTH_SHORT).show(); 
         } 
        }); 

      alert.setNegativeButton(R.string.message_keep, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int whichButton) { 
          // Canceled. Do nothing. 
         } 
        }); 

      // show the dialog window 
      alert.show(); 
     } 
    }); 

} 


public void pickFromContacts(View target) { 
    // start contact list activity to pick one phone number 
    Intent intent = new Intent(Intent.ACTION_PICK, 
      ContactsContract.Contacts.CONTENT_URI); 
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
    startActivityForResult(intent, PICK_CONTACT); 
} 

public void pickFromCallLog(View target) { 
    // start callog list activity to pick one phone number 
    Intent intent = new Intent(DNDCallBlockerBlackListActivity.this, 
      DNDCallBlockerCallogListActivity.class); 
    startActivityForResult(intent, PICK_LOG); 
} 


@Override 
protected void onActivityResult(int reqCode, int resultCode, Intent data) { 
    //resultCode = -1; 
    Log.e("resultCode", reqCode+ ":" + resultCode); 

    super.onActivityResult(reqCode, resultCode, data); 

    Log.e("reqCode",""+reqCode); 

    switch (reqCode) { 

    case (PICK_CONTACT): 
     Log.e("PICK_CONTACT", "PICK_CONTACT" + resultCode); 
     if (resultCode == Activity.RESULT_OK) { 
      Log.e("PICK_CONTACT1", "PICK_CONTACT1"); 
      Uri contactData = data.getData(); 
      // somehow could be possible that data.getData is null :(
      if (contactData != null) { 
       Cursor c = managedQuery(contactData, null, null, null, null); 
       // get selected phone number & contact name 
       if (c.moveToFirst()) { 
        try { 
         m_phones.add(c 
           .getString(
             c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)) 
           .trim()); 
         m_contacts 
           .add(c.getString(
             c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)) 
             .trim()); 
         // add new item to list 
         String tmp_phones = m_phones.toString(); 
         tmp_phones = tmp_phones.substring(1, 
           tmp_phones.length() - 1); 
         // save to sharedpreferences 
         SharedPreferences.Editor editor = settings.edit(); 
         editor.putString(BLACKLIST_PREF, tmp_phones); 
         editor.commit(); 
         // refresh ui 
         m_adapter.notifyDataSetChanged(); 
         // inform user 
         String toast_text = getString(R.string.phone_added); 
         Toast.makeText(getApplicationContext(), toast_text, 
           Toast.LENGTH_SHORT).show(); 
        } catch (IllegalArgumentException e) { 
         Log.e(TAG, e.getMessage()); 
        } 
       } 
       c.close(); 
      } 
     } 
     else { 
      // gracefully handle failure 
      Log.w("DEBUG_TAG", "Warning: activity result not ok"); 
     } 
     break; 
    case (PICK_LOG): 
     Log.e("PICK_LOG", "PICK_LOG"); 
     if (resultCode == Activity.RESULT_OK) { 
      Log.e("PICK_LOG1", "PICK_LOG1"); 
      String numtoadd = data.getAction(); 
      m_phones.add(numtoadd); 
      // search contact for every saved phone number 
      ContentResolver cr = getContentResolver(); 
      Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, 
        Uri.encode(numtoadd)); 
      Cursor cur = cr.query(uri, 
        new String[] { PhoneLookup.DISPLAY_NAME }, null, null, 
        null); 
      if (cur.moveToFirst()) { 
       String name = cur.getString(cur 
         .getColumnIndex(PhoneLookup.DISPLAY_NAME)); 
       m_contacts.add(name); 
      } else { 
       m_contacts.add("N/A"); 
      } 
      cur.close(); 
      // add new item to list 
      String tmp_phones = m_phones.toString(); 
      tmp_phones = tmp_phones.substring(1, tmp_phones.length() - 1); 
      // save to sharedpreferences 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putString(BLACKLIST_PREF, tmp_phones); 
      editor.commit(); 
      // refresh ui 
      m_adapter.notifyDataSetChanged(); 
      // inform user 
      String toast_text = getString(R.string.phone_added); 
      Toast.makeText(getApplicationContext(), toast_text, 
        Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      // gracefully handle failure 
      Log.w("DEBUG_TAG", "Warning: activity result not ok"); 
     } 
     break; 
    } 
} 



public void addPhoneNumber(View target) { 
    final AlertDialog.Builder alert = new AlertDialog.Builder(this); 
    final EditText input = new EditText(this); 

    checkedItem = 0; 

    input.setInputType(InputType.TYPE_CLASS_PHONE); 

    input.setHint(R.string.hint_typehere); 

    alert.setSingleChoiceItems(R.array.manual_phonenumber_types, 0, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int item) { 
        checkedItem = item; 
       } 
      }); 

    alert.setView(input); 
    alert.setIcon(R.drawable.icon); 
    alert.setTitle(R.string.title_add_number); 

    alert.setPositiveButton(R.string.message_ok, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        String value = input.getText().toString().trim(); 
        if (!value.equals("")) { 
         switch (checkedItem) { 
         case 1: 
          value = value.trim() + "*"; 
          break; 
         case 2: 
          value = "*" + value.trim() + "*"; 
          break; 
         case 3: 
          value = "*" + value.trim(); 
          break; 

         default: 
          break; 
         } 
         // put input to list 
         m_phones.add(value); 
         m_contacts.add("N/A"); 

         // add new item to list 
         String tmp_phones = m_phones.toString(); 
         tmp_phones = tmp_phones.substring(1, 
           tmp_phones.length() - 1); 
         // save to sharedpreferences 
         SharedPreferences.Editor editor = settings.edit(); 
         editor.putString(BLACKLIST_PREF, tmp_phones); 
         editor.commit(); 
         // refresh ui 
         m_adapter.notifyDataSetChanged(); 
         // inform user 
         String toast_text = getString(R.string.phone_added); 
         Toast.makeText(getApplicationContext(), toast_text, 
           Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
    alert.setNegativeButton(R.string.message_cancel, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        dialog.cancel(); 
       } 
      }); 
    alert.show(); 
} 

} 

`

+0

有你的權限:'android.permission.GET_ACCOUNTS'和'android.permission.READ_CONTACTS'? –

+0

是的,我添加了這些權限。 – Yasin

回答

0

更改pickFromContacts作爲從接觸獲得的電話號碼:

public void pickFromContacts(View target) { 
    // start contact list activity to pick one phone number 
    Intent intent = new Intent(Intent.ACTION_PICK, 
      ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(intent, PICK_CONTACT); 
} 

,如果你想通過故意設置的setType到Phone.CONTENT_TYPE接接觸,然後改變你的pickFromContacts作爲:

public void pickFromContacts(View target) { 
    // start contact list activity to pick one phone number 
    Intent intent = new Intent(android.content.Intent.ACTION_PICK); 
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
    startActivityForResult(intent, PICK_CONTACT); 
} 
+0

我按照你的方式嘗試過,但沒有運氣。 – Yasin

+0

@AbuSadatMohammedYasin:你得到了什麼問題,因爲我也在我的項目中測試了這個代碼 –

+0

當它返回到onActivityResult時它不能通過這個條件if(resultCode == Activity.RESULT_OK),那就是爲什麼我不能選擇所選的電話號碼。 resultCode爲0且數據爲空 – Yasin

相關問題