admin管理员组

文章数量:1648348

android


public class MyContacts {
	private Context mContext;
	private static final String TAG = "Contacts";

	public MyContacts(Context context) {
		this.mContext = context;
	}

	/**
	 * 重通讯录中获取用户配置信息
	 */
	public void getUserProfiles() {
		// API 14
		String[] mProjection = new String[] { Profile._ID,
				Profile.DISPLAY_NAME_PRIMARY, Profile.LOOKUP_KEY,
				Profile.PHOTO_THUMBNAIL_URI };

		Cursor mProfileCursor = mContext.getContentResolver().query(
				Profile.CONTENT_URI, mProjection, null, null, null);
		while (mProfileCursor.moveToNext()) {
			if (mProfileCursor.getInt(mProfileCursor
					.getColumnIndex(Profile.IS_USER_PROFILE)) == 1) {
				Log.i(TAG, "Profile._ID" + mProfileCursor.getString(0));
				Log.i(TAG,
						"\nDISPLAY_NAME_PRIMARY" + mProfileCursor.getString(1));
				Log.i(TAG, "\nLOOKUP_KEY" + mProfileCursor.getString(2));
				Log.i(TAG,
						"\nPHOTO_THUMBNAIL_URI" + mProfileCursor.getString(3));
			}
		}
	}

	/**
	 * 获取设备上所有的账户信息
	 */
	public void getUserAccount() {

		AccountManager am = AccountManager.get(mContext);
		Account[] accounts = am.getAccounts();
		HashSet<String> contactAccountTypes = new HashSet<String>();
		SyncAdapterType[] syncs = ContentResolver.getSyncAdapterTypes();

		Log.i(TAG, "所有同步适配器信息:\n");
		for (SyncAdapterType sync : syncs) {
			Log.i(TAG, "type:" + sync.accountType + " autohrity:"
					+ sync.authority);
			if (ContactsContract.AUTHORITY.equals(sync.authority)) {
				// 获取联系人账户
				contactAccountTypes.add(sync.accountType);
			}
		}
		
		// 符合联系人账户类型的账户 添加到list
		ArrayList<Account> contactAccounts = new ArrayList<Account>();
		for (Account acct : accounts) {
			if (contactAccountTypes.contains(acct.type)) {
				contactAccounts.add(acct);
			}
		}
		
		Log.i(TAG, "设备全部账户信息\n");
		for (Account ac : accounts) {
			Log.i(TAG, "name: "+ ac.name + "  type:" + ac.type);
		}
		
		//获取账户的认证器信息
		Log.i(TAG, "设备账户所有的认证器信息:\n\n");
		AuthenticatorDescription[] accountTypes = AccountManager.get(mContext).getAuthenticatorTypes();
		for (AuthenticatorDescription des : accountTypes) {
			Log.i(TAG, "type:" + des.type + "  packageName:"+ des.packageName );
		}
		
		
		
		Log.i(TAG, "联系人账户信息:\n");
		for (Account ac : contactAccounts) {
			Log.i(TAG, "name:" + ac.name + "  type:" + ac.type);
		}
		
		
	}

}

 

 

------------------------------------------------------------------ 实现账户变化监听器 -------------------------------------------------------------------------------------------

OnAccountsUpdateListener() 获取到所有的account。随后onDestory()取消该监听器

implements OnAccountsUpdateListener<pre class="java" name="code"> 
//添加监听器
AccountManager.get(this).addOnAccountsUpdatedListener(this, null, true);

 
 
package android.accounts;

/**
 * An interface that contains the callback used by the AccountMonitor
 */
public interface OnAccountsUpdateListener {
    /**
     * This invoked when the AccountMonitor starts up and whenever the account
     * set changes.
     * @param accounts the current accounts
     */
    void onAccountsUpdated(Account[] accounts);
}
<pre class="java" name="code">    /**
     * Called when this activity is about to be destroyed by the system.
     */
    @Override
    public void onDestroy() {
        // Remove AccountManager callback
        AccountManager.get(this).removeOnAccountsUpdatedListener(this);
        super.onDestroy();
    }


 

 

 

    public void onAccountsUpdated(Account[] a) {
        Log.i(TAG, "Account list update detected");
        // Clear out any old data to prevent duplicates
        mAccounts.clear();

        // Get account data from system 账户认证器数组
        AuthenticatorDescription[] accountTypes = AccountManager.get(this).getAuthenticatorTypes();

        // Populate tables
        for (int i = 0; i < a.length; i++) {
            // The user may have multiple accounts with the same name, so we need to construct a
            // meaningful display name for each.将账户对应的AuthenticatorDescription绑定 显示图片和账户Label	
            String systemAccountType = a[i].type;
            AuthenticatorDescription ad = getAuthenticatorDescription(systemAccountType,
                    accountTypes);
            AccountData data = new AccountData(a[i].name, ad);
            mAccounts.add(data);
        }

        // Update the account spinner
        mAccountAdapter.notifyDataSetChanged();
    }


 

    /**
     * Obtain the AuthenticatorDescription for a given account type.
     * @param type The account type to locate.
     * @param dictionary An array of AuthenticatorDescriptions, as returned by AccountManager.
     * @return The description for the specified account type.
     */
    private static AuthenticatorDescription getAuthenticatorDescription(String type,
            AuthenticatorDescription[] dictionary) {
        for (int i = 0; i < dictionary.length; i++) {
            if (dictionary[i].type.equals(type)) {
                return dictionary[i];
            }
        }
        // No match found
        throw new RuntimeException("Unable to find matching authenticator");
    }



 

   /**
     * A container class used to repreresent all known information about an account.
     */
    private class AccountData {
        private String mName;
        private String mType;
        private CharSequence mTypeLabel;
        private Drawable mIcon;

        /**
         * @param name The name of the account. This is usually the user's email address or
         *        username.
         * @param description The description for this account. This will be dictated by the
         *        type of account returned, and can be obtained from the system AccountManager.
         */
        public AccountData(String name, AuthenticatorDescription description) {
            mName = name;
            if (description != null) {
                mType = description.type;

                // The type string is stored in a resource, so we need to convert it into something
                // human readable.
                String packageName = description.packageName;
                PackageManager pm = getPackageManager();

                if (description.labelId != 0) {
                    mTypeLabel = pm.getText(packageName, description.labelId, null);
                    if (mTypeLabel == null) {
                        throw new IllegalArgumentException("LabelID provided, but label not found");
                    }
                } else {
                    mTypeLabel = "";
                }

                if (description.iconId != 0) {
                    mIcon = pm.getDrawable(packageName, description.iconId, null);
                    if (mIcon == null) {
                        throw new IllegalArgumentException("IconID provided, but drawable not " +
                                "found");
                    }
                } else {
                    mIcon = getResources().getDrawable(android.R.drawable.sym_def_app_icon);
                }
            }
        }

        public String getName() {
            return mName;
        }

        public String getType() {
            return mType;
        }

        public CharSequence getTypeLabel() {
            return mTypeLabel;
        }

        public Drawable getIcon() {
            return mIcon;
        }

        public String toString() {
            return mName;
        }
    }


 





 


本文标签: androidAccount