【问题标题】:How to call Android calculator on my app for all phones如何在我的应用程序上为所有手机调用 Android 计算器
【发布时间】:2012-11-19 16:39:48
【问题描述】:
  public static final String CALCULATOR_PACKAGE ="com.android.calculator2";
  public static final String CALCULATOR_CLASS ="com.android.calculator2.Calculator";
  Intent intent = new Intent();

    intent.setAction(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setComponent(new ComponentName(
         CALCULATOR_PACKAGE,
         CALCULATOR_CLASS));

以上仅适用于 HTC

  public static final String CALCULATOR_PACKAGE ="com.sec.android.app.popupcalculator";
  public static final String CALCULATOR_CLASS ="com.sec.android.app.popupcalculator.Calculator";

以上适用于 S3

我需要一个适用于所有人的代码。有任何线索的人吗?请给出示例代码

【问题讨论】:

  • @kumaand 这个基本一样……
  • @kumaand 仅适用于 HTC 但不适用于 S3。我有 HTC 和 S3 的独立代码,两者都在工作。我需要一个适合所有人的。
  • 最好的方法是使用 PackageManager 获取内部应用程序包名称并在所有字符串中找到 calculator 如果找到,然后提取主类名称或包以启动它。通过这种方式,您将支持所有设备或用于启动默认计算器的平板电脑
  • @imran Khan 我有同样的想法,但实施是个问题。请帮我举个例子。它会给我一个良好的开端。谢谢

标签: android android-intent


【解决方案1】:

您可以在所有安卓设备上尝试默认calculator

ArrayList<HashMap<String,Object>> items =new ArrayList<HashMap<String,Object>>();

final PackageManager pm = getPackageManager();
List<PackageInfo> packs = pm.getInstalledPackages(0);  
for (PackageInfo pi : packs) {
if( pi.packageName.toString().toLowerCase().contains("calcul")){
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("appName", pi.applicationInfo.loadLabel(pm));
    map.put("packageName", pi.packageName);
    items.add(map);
 }
}

现在您可以启动计算器应用程序:

if(items.size()>=1){
String packageName = (String) items.get(0).get("packageName");
Intent i = pm.getLaunchIntentForPackage(packageName);
if (i != null)
  startActivity(i);
} 
else{
      // Application not found
   }

而对于 Api >= 15 ,你可以使用

Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_CALCULATOR);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

【讨论】:

  • 我确信此代码将适用于所有设备以启动计算器应用程序
  • 让我试试它会在一分钟内告诉你
  • 非常感谢!!它工作的人非常感谢它适用于所有手机
  • 我已经在 HTC ONE X 和 Sam Sung S3 设备上进行了测试。你真的救了我很多!! :)
  • 如果这个答案真的对你有帮助,那就把它标记为答案。非常感谢朋友
【解决方案2】:
Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_APP_CALCULATOR);
startActivity(i);

【讨论】:

    【解决方案3】:

    您必须检查默认计算器包名称(com.android.calculator2)是否可用:

    try{
         ApplicationInfo info = getPackageManager()
                                 .getApplicationInfo("com.android.calculator2", 0 );
    
        } catch( PackageManager.NameNotFoundException e ){
         //application doesn't exist
    }
    

    三星使用许多预装了 TouchWiz 的应用程序,而这些应用程序在现有的 Android 系统中是不可用的。因此,如果您在上面遇到异常,您可以检查三星的计算器是否可用。 顺便说一句,我 认为 com.android.calculator2 不是 HTC 特有的。

    【讨论】:

    • @Ahmed HTC One X 一切正常,现在我如何让 HTC 和 S3 都工作。我没有任何例外。你知道如何去做吗?如何获取计算器的包和类
    • 我手机上三星的计算器是 com.sec.android.app.popupcalculator 。
    【解决方案4】:

    这是一个@ρяσѕρєя K 的修改答案 因为它在三星手机上运行良好,而且只有包裹有“calc” 但并非所有手机都像 HTC 和 LENOVO 等

    对于 Api >= 15 ,您可以使用 BUT !!! 罢工>

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_APP_CALCULATOR);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    

    这可能会导致这样的错误

    android.content.ActivityNotFoundException:找不到要处理的活动 意图 { act=android.intent.action.MAIN cat=[android.intent.category.APP_CALCULATOR] flg=0x10000000 }

    让我们看看这个

    将所有应用加载到阵列

        // Declare universal if you want Access any where from scope
    
    
    ArrayList<HashMap<String,Object>> items;
        PackageManager pm ;    
    List<PackageInfo> packs;
    
        // initialise From Oncreate if you want
        items =new  ArrayList<HashMap<String,Object>>(); 
        pm = getPackageManager();
        packs = pm.getInstalledPackages(0);  
            for (PackageInfo pi : packs)
     {
                HashMap<String, Object> map = new HashMap<String, Object>();
                map.put("appName", pi.applicationInfo.loadLabel(pm));
                map.put("packageName", pi.packageName);
                items.add(map); 
     }
    

    这是技巧部分 我们正在遍历所有应用程序以获取应用程序名称或匹配“计算器”

    public void opencalculator(){
      int d=0;
      if(items.size()>=1){
      int j=0;
     for(j=0;j<items.size();j++){
     String AppName = (String) items.get(j).get("appName");
    // Log.w("Name",""+AppName);
        if(AppName.matches("Calculator"))
                         {
                                d=j;
                                break;
                         }
                        }
                        String packageName = (String) items.get(d).get("packageName");
    
                        Intent i = pm.getLaunchIntentForPackage(packageName);
                        if (i != null){
                            Toast.makeText(getContext(),"STARTING",Toast.LENGTH_SHORT).show();
    
                            startActivity(i);}
                        else {
                            Toast.makeText(getContext(),"SORRY I CANT OPEN CALCULATOR :(",Toast.LENGTH_SHORT).show();
    
                        }
                    }
    
    
                    else{
                        Toast.makeText(getContext(),"SORRY I CANT START CALCULATOR :(",Toast.LENGTH_SHORT).show();
    
    
                    }
    }
    

    调用计算器

    opencalculator();
    

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 2022-06-30
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      相关资源
      最近更新 更多