0

ユーザーがアプリを再入力しようとしている場合は、アプリが既に実行されているかどうかを確認しようとしています。1つのアプリが別のアプリを起動し、ユーザーがモバイルで2番目のアプリに入ると、2つのインスタンスになる可能性があります。

元のランチャーアプリを起動する私のランチャーアプリは次のようになります:

  Intent i = new Intent(Intent.ACTION_MAIN);
  PackageManager manager = getPackageManager();

  i = manager.getLaunchIntentForPackage("com.test.vayo");
  i.addCategory(Intent.CATEGORY_LAUNCHER);
   startActivity(i);

私の元のコードでは、2つのインスタンスがあるかどうかを確認しようとしていますが、このコードでは常にtrueになります

    if (processName == null) {
        return false;
    }
    ActivityManager manager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses();
    for (RunningAppProcessInfo process : processes) {
        if (processName.equals(process.processName)) {

           return true;
        }
    }
    return false;

このコードから取得したproccessName、pidはandroid.os.Process.myPid()から取得します。

private String getAppName(int pID)

{{

String processName = "";
ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE);

List l = am.getRunningAppProcesses();
Iterator i = l.iterator();
PackageManager pm = context.getPackageManager();
while(i.hasNext()) 
{
      ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
      try 
      { 
          if(info.pid == pID)
          {
              CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
              //Log.d("Process", "Id: "+ info.pid +" ProcessName: "+ info.processName +"  Label: "+c.toString());
              //processName = c.toString();
              processName = info.processName;
          }
      }
      catch(Exception e) 
      {
            //Log.d("Process", "Error>> :"+ e.toString());
      }
 }
   return processName;
 }

私が最初のコードブロックで常に真実になっている理由を教えていただければ幸いです。どうもありがとう!!

4

0 に答える 0