gpt4 book ai didi

java - Android - 显示所有已安装应用程序的应用程序选择器

转载 作者:行者123 更新时间:2023-12-01 22:51:10 27 4
gpt4 key购买 nike

我想打开一个应用程序选择器,其中会列出手机上已安装的应用程序。单击选择器中的应用程序时,我不需要打开它,而是获取它的包名称。

我知道我可以创建一个特定的 Intent ,例如使用 Intent.ACTION_SEND 和

Intent.createChooser()

我还知道我可以使用包管理器列出已安装的包。

有没有办法结合这两种方法并为所有已安装的应用程序创建一个应用程序选择器?

最佳答案

Chooser.java

public class Chooser extends ListActivity {
AppAdapter adapter=null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chooser_layout);

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);

/* SetResult

String pack_name = name.getPackageName();

Intent intentMessage=new Intent();
intentMessage.putExtra("MESSAGE_package_name", pack_name);
setResult(1,intentMessage);
finish();

*/




}

class AppAdapter extends ArrayAdapter<ResolveInfo> {
private PackageManager pm=null;

AppAdapter(PackageManager pm, List<ResolveInfo> apps) {
super(Chooser.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));
}
}


}

chooser_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView android:id="@+id/icon"
android:drawable="@drawable/ic_launcher"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_alignParentLeft="true"
android:paddingLeft="2px"
android:paddingTop="3px"
android:paddingBottom="3px"
android:paddingRight="3px"
/>
<TextView
android:id="@+id/label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/icon"
android:textSize="18sp"
android:text="Test App will here bla bla"
android:paddingTop="2px"
android:paddingBottom="2px"
/>

</RelativeLayout>

您可以选择这样的应用程序:

Intent appIntent;
...

appIntent=new Intent(this,Chooser.class);
startActivityForResult(appIntent, 1);



...


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{

super.onActivityResult(requestCode, resultCode, data);

if(null!=data){

if(requestCode==1){
//Do something
String message=data.getStringExtra("MESSAGE_package_name");
package_Name.SetText(message);
}
}

这对你有用。

关于java - Android - 显示所有已安装应用程序的应用程序选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com