2009-12-23 38 views
1

我有一個Android應用程序,作爲應用程序的一部分,我希望用戶能夠查看,選擇和修改用戶聯繫人。我的主要活動出於可用性原因(從用戶方面)擴展了TabActivity。因此,在一個標籤中,我想要顯示用戶聯繫人,我已經使用此代碼完成了該操作:mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("Contacts").setContent(new Intent(Intent.ACTION_PICK, People.CONTENT_URI))); 使用默認的手機聯繫活動。我的Android清單是:` Android securityException和用戶聯繫人

<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<uses-permission android:name="android.permission.READ_OWNER_DATA"/> 

<application android:icon="@drawable/icon" android:theme="@android:style/Theme.NoTitleBar"> 

    <activity android:name=".WaveCally" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".streamer" 
       android:label="@string/stream"> 
    </activity> 



</application> 
<uses-sdk android:minSdkVersion="4" /> 

',但我一直在我的日誌和活動越來越崩潰安全異常。有任何想法嗎? 也正如我所提到的,我想修改聯繫人(主要是添加一些額外的字段),要做到這一點,我必須得到contantprovider,並在每個聯繫人添加額外的字段?那麼如果我從上述活動中選擇一個聯繫人,這些額外的字段是否可用?

回答

2

您需要在應用程序清單中聲明您的應用程序將訪問聯繫人。 (android.permission.READ_CONTACTS

這就是你需要做什麼:

http://developer.android.com/guide/topics/manifest/uses-permission-element.html

基本上,添加以下行的應用清單(打開清單標記之後):

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
+0

我發佈了我的清單,但由於某種原因清單標記未顯示。我有這種權限,但仍然得到異常,這就是爲什麼我張貼在這裏,因爲它看起來很奇怪。這是從我的清單副本: <使用權限android:name =「android.permission.READ_CONTACTS」/> <使用權限android:name =「android.permission.READ_OWNER_DATA」/> – maxsap 2009-12-23 16:47:44

0
<uses-permission android:name="android.permission.READ_CONTACTS" /> 

除了將該權限添加到您的清單,對於API> = 23,您還需要獲得運行時權限

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); 
//After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method 
ActivityCompat.requestPermissions(SettingsActivity.this, 
    new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION} 
         , PERMISSIONS_REQUEST_READ_CONTACTS); 
    } else { 
    // Android version is lesser than 6.0 or the permission is already granted. 
    //fetch contacts 
    }