Это упоминание во многих темах. Контакт FaceBook не может быть прочитан сторонним приложением, может прочитать только системное приложение или действие. Так на любом телефоне Android 'DirectDial' и 'DirectMessage', который кто-то может создать долгим нажатиемна главном экране можно прочитать контакт Facebook.Поэтому я копаюсь в исходном коде Android, чтобы найти, что это такое, чтобы прочитать контакт в Facebook.
Мои выводы.
Чтобы создать ярлыки для DirectDial, DirectMessage и ContactShortcut, он запустится.ContactSelectionActivity, которое будет возвращать Намерение как результат, имеющий контактную информацию «имя», «номер» и «значок». Если вы хотите что-то понять, вот ссылка на ту же
https://github.com/android/platform_packages_apps_contacts/blob/master/src/com/android/contacts/activities/ContactSelectionActivity.java
Итак, как запустить 'DirectDial' или 'DirectMessage' из вашего кода, я смотрю в AndroidManifest.xml
https://github.com/android/platform_packages_apps_contacts/blob/master/AndroidManifest.xml
<activity-alias android:name="alias.DialShortcut"
android:targetActivity=".activities.ContactSelectionActivity"
android:label="@string/shortcutDialContact"
android:icon="@mipmap/ic_launcher_shortcut_directdial"
android:enabled="@*android:bool/config_voice_capable">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.CAR_MODE" />
</intent-filter>
</activity-alias>
<activity-alias android:name="alias.MessageShortcut"
android:targetActivity=".activities.ContactSelectionActivity"
android:label="@string/shortcutMessageContact"
android:icon="@mipmap/ic_launcher_shortcut_directmessage"
android:enabled="@*android:bool/config_voice_capable">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
Здесь они создают псевдонимContactSelectionActivity для запуска 'DirectDial' или 'DirectMessage'
Так вот код для запуска directdial или сообщения
private boolean launchContactSelector() {
ComponentName distantActivity;
if (Constants.PHONE_CALL) //check what you want to call
distantActivity = new ComponentName("com.android.contacts", "alias.DialShortcut");
else {
distantActivity = new ComponentName("com.android.contacts", "alias.MessageShortcut");
}
Intent intent = new Intent();
intent.setComponent(distantActivity);
intent.setAction(Intent.ACTION_PICK);
intent.setAction(Intent.ACTION_CREATE_SHORTCUT);
startActivityForResult(intent, selector);
return true;
}
После выбора контакта
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK) return;
Intent intent = new Intent();
intent = ((Intent) data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT));
switch (requestCode) {
case Constants.PHONE_CALL: {
intent.setAction(Intent.ACTION_CALL);
break;
}
case Constants.MESSAGE: {
intent.setAction(Intent.ACTION_SENDTO);
break;
}
}
String number = intent.getData().toString(); //It will have the phone number
String name = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME); //Contact name
ImageView image = new ImageView() //Contact image
image.setImageBitmap((Bitmap) data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON));
// Must need to set the Intent.ACTION_SENDTO or Intent.ACTION_CALL because default permission sent is CALL_PRIVILEGED which is for system Activty you .
startActivity(data);
}
ТакТеперь вы можете прочитать контакт Facebook в вашем приложении. Теперь храните информацию, которую можно использовать в будущем.
Я опубликую ссылку моего приложения с открытым исходным кодом, как только оно будет завершено, где я на самом деле использую это.