如何搜索应用程序名称而不是包名称并打开它?

3
这是我在主活动中的代码...
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button bClock = (Button) findViewById(R.id.buttonSearch);

    bClock.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String packageName = "com.android.gallery3d";
            Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);

            if(intent == null) {
                Intent marketIntent = new Intent(Intent.ACTION_VIEW);
                marketIntent.setData(Uri.parse("market://details?id=packagename"));
                startActivity(marketIntent);
            }
            startActivity(intent);
            }
        });
    }

我的问题是是否有可能不使用包名(com.android.gallery3d)来搜索所有应用程序?例如,我想搜索“Facebook”,然后输入并搜索。因为如果我使用该包名,我将无法打开新安装的应用程序。提前致谢。
1个回答

0

您可以使用PackageManager

final PackageManager pm = context.getPackageManager();
ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");

还有这个

CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName,PackageManager.GET_META_DATA));

这将返回其清单文件中<application>标签定义的应用程序名称。


@jvpintang 在任何活动中都可以使用。 - Adnan
我把你的第一个代码放在我的按钮onClick中,那么我应该把第二个代码放在哪里? - jvpintang
因为我遇到了错误 "无法解析符号 'context'" 和 "无法解析符号 'info'"。 - jvpintang
在顶部添加一个变量Context context=this; - Adnan
好的,谢谢。你第二段代码中的“无法解析符号'info'”怎么办? - jvpintang
添加一个变量 Info info; - Adnan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接