2014-06-27 28 views
0

我已经声明了自定义操作Intent,并基于可以处理该应用程序的应用程序构建了该用户界面Intent。现在我知道按钮点击应该启动的是哪个应用程序,如何防止选择器显示所有可能的应用程序。启动专用应用程序以防止意图选择器

final Intent intent = new Intent(); 
intent.setAction(CUSTOM_ACTION); 

PackageManager packageManager = getPackageManager(); 
final List<ResolveInfo> activities = packageManager 
     .queryIntentActivities(intent, 0); 

for (int i = 0; i < activities.size(); i++) { 
    final ResolveInfo info = activities.get(i); 

    Button b = new Button(this); 
    b.setText(info.loadLabel(packageManager)); 

    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // This line was the solution 
      intent.setPackage(info.activityInfo.packageName); 

      startActivityForResult(intent, REQUEST_CODE); 
     } 
    }); 

    mLayout.addView(b); 
} 

谢谢。

+0

请允许*用户*选择*用户*设备上的*用户*应用程序中的哪一个*用于满足*用户*请求以使用*用户*数据,使用*用户*电池,带宽等。 – CommonsWare

+0

@CommonsWare,并使用*用户*的应用内结算应用程序? [由于缺少一行'bindIntent.setPackage(“),因此[应用内结算可能很容易被黑客攻击](https://sufficientlysecure.org/index.php/2013/10/29/google-play-billing-hacked/) com.android.vending“)',这限制了IAB处理。同样的事情可能发生在这里(虽然不太可能,但你明白了)。 – ElementW

回答

2

看一看Intent.setPackage(String),它允许您仅使用提供的软件包名称启动Intent,从而绕过选择器。如果您想要使用的软件包本身不在Android上,我仍然建议您首先检查它的存在,否则提醒用户。

相关问题