アプリを起動するのにパッケージ名ではなくアプリ名で起動することはありますか?
パッケージ名を使用せずに起動Facebookなど?
パッケージ名が唯一の選択肢である場合、どのように実際にすべてのパッケージ名を知ることができますか?アプリから他のアプリケーションを起動する方法は?
返信いただければ幸いです。
アプリを起動するのにパッケージ名ではなくアプリ名で起動することはありますか?
パッケージ名を使用せずに起動Facebookなど?
パッケージ名が唯一の選択肢である場合、どのように実際にすべてのパッケージ名を知ることができますか?アプリから他のアプリケーションを起動する方法は?
返信いただければ幸いです。
パッケージ名を使用せずに起動Facebookなど?
プログラム名でパッケージ名を使用する以外に選択肢はありません。 「Facebook」はユーザーが直面している文字列であり、異なる言語で翻訳されるべきです。
アプリ名はパッケージ名ではありませんが、アプリを起動するにはどうしますか?
Androidでは、アプリを「起動」しません。我々は活動を開始する。アプリはゼロ、1つ、または複数の起動可能なアクティビティを持つことができます。
どのように実際にすべてのパッケージ名を知ることができますか?
ほとんどの場合、それはあなたが本当に望むものではありません。ほとんどの場合、起動可能なアクティビティのリストが必要です。 PackageManager
から、queryIntentActivities()
の形式で、起動可能なすべてのアクティビティのリスト(つまり、ACTION_MAIN
とCATEGORY_LAUNCHER
のもの)を尋ねます。
/***
Copyright (c) 2008-2012 CommonsWare, LLC
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.
Covered in detail in the book _The Busy Coder's Guide to Android Development_
https://commonsware.com/Android
*/
package com.commonsware.android.launchalot;
import android.app.ListActivity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.Collections;
import java.util.List;
public class Launchalot extends ListActivity {
AppAdapter adapter=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PackageManager pm=getPackageManager();
Intent main=new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);
Collections.sort(launchables,
new ResolveInfo.DisplayNameComparator(pm));
adapter=new AppAdapter(pm, launchables);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v,
int position, long id) {
ResolveInfo launchable=adapter.getItem(position);
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
}
class AppAdapter extends ArrayAdapter<ResolveInfo> {
private PackageManager pm=null;
AppAdapter(PackageManager pm, List<ResolveInfo> apps) {
super(Launchalot.this, R.layout.row, apps);
this.pm=pm;
}
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
if (convertView==null) {
convertView=newView(parent);
}
bindView(position, convertView);
return(convertView);
}
private View newView(ViewGroup parent) {
return(getLayoutInflater().inflate(R.layout.row, parent, false));
}
private void bindView(int position, View row) {
TextView label=(TextView)row.findViewById(R.id.label);
label.setText(getItem(position).loadLabel(pm));
ImageView icon=(ImageView)row.findViewById(R.id.icon);
icon.setImageDrawable(getItem(position).loadIcon(pm));
}
}
}
をあなた本当にがPackageManager
にgetInstalledApplications()
を呼び出して、インストールされたアプリケーションのすべてのリストが必要な場合:This sample appは、ホーム画面を使用する可能性のあるランチャーの同じ種類を作成することによって、これを示しています。