Android:我可以从第三方应用程序中使用这个意图吗?

Android:我可以从第三方应用程序中使用这个意图吗?,android,twitter,exception-handling,android-intent,Android,Twitter,Exception Handling,Android Intent,我正在使用意图通过Twitter客户端发布消息。 当手机上没有Twitter应用程序时,我想将用户重定向到市场。 但是异常活动NotFoundException不工作。每次(当我没有Twitter应用程序时)我都会收到错误“没有应用程序可以执行此操作” I read ActivityNotFoundException是startActivity及其子级的异常处理程序。可能解决方案不在异常处理中。我建议使用PackageManager和queryIntentActivities()来确定是否有什么

我正在使用意图通过Twitter客户端发布消息。 当手机上没有Twitter应用程序时,我想将用户重定向到市场。 但是异常活动NotFoundException不工作。每次(当我没有Twitter应用程序时)我都会收到错误“没有应用程序可以执行此操作”


I read ActivityNotFoundException是startActivity及其子级的异常处理程序。可能解决方案不在异常处理中。

我建议使用
PackageManager
queryIntentActivities()
来确定是否有什么东西可以处理您的
startActivity()
请求。

这是发布的解决方案

我使用PackageManager和QueryInputActivities()指示指定的操作是否可以用作意图。 该方法向软件包管理器查询手机上已安装的软件包,这些软件包可以通过指定的操作响应某个意图。如果没有找到包,则该方法返回false

public static boolean isIntentAvailable(Context context, String action) {
        final PackageManager packageManager = context.getPackageManager();
        final Intent intent = new Intent(action);
        List<ResolveInfo> list =
                packageManager.queryIntentActivities(intent,
                        PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    }
使用intentMarket方法。只需输入url=”market://search?q=twitter" 顺便说一句,模拟器中没有安装market

public void intentMarket (String url){
    Intent i = new Intent(Intent.ACTION_VIEW);
    Uri u = Uri.parse(url);
    i.setData(u);
    try{
        startActivity(i);
    }
    catch(ActivityNotFoundException e){
        Toast.makeText(this, "Pas d'applications twitter trouvé.", Toast.LENGTH_SHORT).show();  
    }
}
关于PackageManager的更多信息


如果你觉得这有用,请竖起大拇指

谢谢你的公共软件。我会买你的书。
public void ConnectTwitter(){
    String msg = getResources().getString(R.string.partager_twitter).toString();
    Intent intentTwitter = new Intent(Intent.ACTION_SEND);
    intentTwitter.putExtra(Intent.EXTRA_TEXT,msg);
    intentTwitter.setType("application/twitter");
    if (isIntentAvailable(this,"application/twitter")){
        startActivity(Intent.createChooser(intentTwitter,getResources().getString(R.string.partager_sel_tweet)));
    }
    else{
        /* Handle Exception if no suitable apps installed */  
        Log.d("twitter", "Catch exception");
        new AlertDialog.Builder(PartagerActivity.this)  
       .setTitle(getResources().getString(R.string.partager_sel_tweet))  
       .setMessage(getResources().getString(R.string.partager_app_download))
       .setNegativeButton("Non", null)  
       .setPositiveButton("Oui", new DialogInterface.OnClickListener() {  
                     public void onClick(DialogInterface dialog, int whichButton) {  
                        intentMarket("market://search?q=twitter");  
                     }  
                 })  
       .show();     
    }

}
public void intentMarket (String url){
    Intent i = new Intent(Intent.ACTION_VIEW);
    Uri u = Uri.parse(url);
    i.setData(u);
    try{
        startActivity(i);
    }
    catch(ActivityNotFoundException e){
        Toast.makeText(this, "Pas d'applications twitter trouvé.", Toast.LENGTH_SHORT).show();  
    }
}