在很多线程中提到 FaceBook 联系人无法被第三方应用程序读取,只有系统应用程序或活动可以读取。所以在任何人可以通过长按创建的任何 android 手机“DirectDial”和“DirectMessage”上在主屏幕上可以阅读 facebook 联系人。因此,我深入研究了 Android 源代码,以找到可以阅读 facebook 联系人的内容。
我的发现。
要为 'DirectDial' 、 'DirectMessage' 和 ContactShortcut 创建快捷方式,它将启动 ContactSelectionActivity ,该活动将返回 Intent 作为具有联系信息 'name' 'number' 和 'icon' 的结果。如果有人在这里挖掘什么是相同的链接
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”
所以这里是启动直接拨号或消息的代码
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 联系人 现在将信息存储在某个地方以供将来使用。
我将在我实际使用它的地方完成我的开源应用程序的链接。