Как вызвать калькулятор Android в моем приложении для всех телефонов

  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

Мне нужен код, который работает для всех. Кто-нибудь с какой-либо подсказкой? Приведите пример кода

Ответ 1

вы можете попробовать по умолчанию calculator на всех устройствах Android:

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

Ответ 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
}

Samsung использует множество приложений, предустановленных с TouchWiz, которые недоступны на складе Android. Поэтому, если вы получаете исключение из вышесказанного, вы можете проверить, доступен ли калькулятор Samsung. Кстати, я думаю, com.android.calculator2 не является специфичным для HTC.

Ответ 4

Ну, это Модифицированный ответ @pяσѕρєя K потому что он отлично работает на мобильных телефонах Samsung, и только пакеты имеют "calc", но не все мобильные телефоны, такие как HTC AND LENOVO ETC

И для 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);

Забастовкa > ЭТО МОЖЕТ ПРИВЕСТИ К ОШИБКЕ, КАК ЭТО.

android.content.ActivityNotFoundException: активность не обнаружена Intent {act = android.intent.action.MAIN cat = [android.intent.category.APP_CALCULATOR] flg = 0x10000000}

SO LETS ВЗЯТЬ НА ЭТОМ

ЗАГРУЗИТЬ все приложения в Array

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


                }
}

CALL OPENCALCULATOR

opencalculator();

Ответ 5

Привет, я мог бы открыть калькулятор, но теперь я хочу поставить цифры там, как вы знаете, например, 123 + 345, 23x123 и т.д. Но я не могу, кто-нибудь, чтобы помочь мне?