java - 如何从 Android 应用程序打开 Facebook 应用程序上的个人资料

标签 java android android-studio android-intent android-context

我正在尝试在 ImageView 上设置点击监听器,这将在特定页面上打开 Facebook 应用程序。 变量“facebook”包含我要打开的 Facebook 页面的 URL 我的点击监听器代码如下:

            imgFb.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (facebook != null) {
                        Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
                        String facebookUrl = getFacebookPageURL(context);
                        facebookIntent.setData(Uri.parse(facebookUrl));
                        startActivity(facebookIntent);
                    }
                }
            });

getFacebookUrl()方法如下:

//Open club's Facebook page
        public String getFacebookPageURL(Context context) {
            PackageManager packageManager = context.getPackageManager();
            try {
                int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;
                if (versionCode >= 3002850) { //newer versions of fb app
                    return "fb://facewebmodal/f?href=" + facebook;
                } else { //older versions of fb app
                    return "fb://page/" + facebook;
                }
            } catch (PackageManager.NameNotFoundException e) {
                return facebook; //normal web url
            }
        }

这段代码对我不起作用。我在以下两行中有空指针异常: PackageManager packageManager = context.getPackageManager();

String facebookUrl = getFacebookPageURL(context);

我认为这与上下文变量有关。我不太了解它,也不确定到底应该放什么,所以我使用了 Open Facebook Page in Facebook App (if installed) on Android 中的代码。谁能帮我解决这个问题?

最佳答案

我认为你没有在主体中声明你的上下文,你必须添加,

context=getApplicationContext(); 

context=YourActivity.this;

你的 body 。

这对我有用。

Button btn;
Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn=(Button)findViewById(R.id.btn);
    context=getApplicationContext();
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (isAppInstalled()) {
                Toast.makeText(getApplicationContext(), "facebook app already installed", Toast.LENGTH_SHORT).show();
                Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
                String facebookUrl = getFacebookPageURL(context);
                facebookIntent.setData(Uri.parse(facebookUrl));
                startActivity(facebookIntent);

            } else {
                Toast.makeText(getApplicationContext(), "facebook app not installing", Toast.LENGTH_SHORT).show();
            }



        }
    });
}
public static String FACEBOOK_URL = "https://www.facebook.com/YourPageName";
public static String FACEBOOK_PAGE_ID = "YourPageName";

//method to get the right URL to use in the intent
public String getFacebookPageURL(Context context) {
    PackageManager packageManager = context.getPackageManager();
    try {
        int versionCode = packageManager.getPackageInfo("com.facebook.orca", 0).versionCode;
        if (versionCode >= 3002850) { //newer versions of fb app
            return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
        } else { //older versions of fb app
            return "fb://page/" + FACEBOOK_PAGE_ID;
        }
    } catch (PackageManager.NameNotFoundException e) {
        return FACEBOOK_URL; //normal web url
    }
}



public boolean isAppInstalled() {
    try {
        getApplicationContext().getPackageManager().getApplicationInfo("com.facebook.katana", 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

关于java - 如何从 Android 应用程序打开 Facebook 应用程序上的个人资料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611453/

相关文章:

android - 我的 FragmentActivity 中的 ClassNotFoundException mopub

java - JVM 的 "-server"选项是否需要成为第一个选项?

java - 如何在 Struts 2 中更改 JSESSIONID

java - Java 日历类中不影响其他对象的静态变量

android - 提交 Android Studio 时忽略文件

android - 所有 com.android.support 库必须使用完全相同的版本规范 gradle 问题

java - 调试 VisualVM 远程连接

java - 存储/恢复下载队列的最简单方法

android - Recycler 查看点击动画

Android Gradle 导出失败