如何获取Android应用程序id?

如何获取Android应用程序id?,android,Android,在Android中,我如何通过编程(或其他方法)获取应用程序的id,以及如何使用该id与其他应用程序通信?我不确定您指的是什么“应用程序id”,但对于应用程序的唯一标识符,您可以使用: 当前活动中的getApplication().getPackageName()方法,PackageInfo.sharedUserId字段将显示清单中分配的用户Id 如果希望两个应用程序具有相同的用户ID,以便它们可以看到彼此的数据并在同一进程中运行,则在清单中为它们分配相同的用户ID: android:share

在Android中,我如何通过编程(或其他方法)获取应用程序的id,以及如何使用该id与其他应用程序通信?

我不确定您指的是什么“应用程序id”,但对于应用程序的唯一标识符,您可以使用:


当前活动中的getApplication().getPackageName()方法,
PackageInfo.sharedUserId
字段将显示清单中分配的用户Id

如果希望两个应用程序具有相同的用户ID,以便它们可以看到彼此的数据并在同一进程中运行,则在清单中为它们分配相同的用户ID:

android:sharedUserId="string"
具有相同sharedUserId的两个包也需要具有相同的签名


我还建议您在正确的方向上进行微调。

如果整个目的是与其他应用程序进行数据通信,请使用Intent的sendBroadcast方法。

否则,您可以获取应用程序运行的进程id:

最终静态int-android.os.Process.myPid()

返回此进程的标识符,可与killProcess(int)和sendSignal(int,int)一起使用。

我不确定您需要应用程序/安装ID做什么,但您可以在Android开发者的一篇优秀文章中回顾现有的可能性:

总而言之:

  • UUID.randomuid()
    用于在安装后第一次运行应用程序时创建id,然后进行简单检索
  • 实际设备标识符的
    TelephonyManager.getDeviceId()
  • Settings.Secure.ANDROID
    在相对现代的设备上

如果通过
应用程序id
,您指的是
包名
,则可以使用方法
Context::getPackageName
()

如果您希望与其他应用程序通信,有多种方式:

  • 启动另一个应用程序的活动,并在“意图”的“附加”中发送数据
  • 发送带有特定动作/类别的广播,并在附加节目中发送数据
  • 如果您只需要共享结构化数据,请使用内容提供商
  • 如果其他应用程序需要在后台连续运行,请使用服务器并将自己“绑定”到服务

  • 如果您能够详细说明您的确切需求,社区将能够更好地帮助您。

    如果您使用的是新的**Gradle构建系统,则
    getPackageName
    将奇怪地返回应用程序Id,而不是包名。因此,戈拉夫大师的回答是正确的,但他不需要从++

    如果按应用程序id,则指的是包名称

    了解更多有关差异的信息

    **在这一点上并不新鲜


    ++我意识到他的回答在2011年非常有意义

    如果您正在寻找gradle中由
    applicationId
    定义的值,您只需使用

    BuildConfig.APPLICATION_ID 
    

    Android应用程序ES文件浏览器在用户应用程序部分显示Android软件包名称,这对Bitwarden很有用。Bitwarden将其称为“android应用程序包ID(或包名)”。

    要跟踪安装,您可以使用UUID作为标识符,并在安装后第一次运行应用程序时创建一个新的UUID。下面是一个名为“Installation”的类的草图,其中包含一个静态方法Installation.id(上下文)。您可以想象将更多特定于安装的数据写入安装文件

    public class Installation {
    private static String sID = null;
    private static final String INSTALLATION = "INSTALLATION";
    public synchronized static String id(Context context) {
    
        if (sID == null) {  
           File installation = new File(context.getFilesDir(), INSTALLATION);
           try {
               if (!installation.exists())
                   writeInstallationFile(installation);
               sID = readInstallationFile(installation);
           } catch (Exception e) {
               throw new RuntimeException(e);
           }
        }
       return sID;
    }
    
    private static String readInstallationFile(File installation) throws IOException {
       RandomAccessFile f = new RandomAccessFile(installation, "r");
       byte[] bytes = new byte[(int) f.length()];
       f.readFully(bytes);
       f.close();
       return new String(bytes);
    }
    
    private static void writeInstallationFile(File installation) throws IOException {
       FileOutputStream out = new FileOutputStream(installation);
       String id = UUID.randomUUID().toString();
       out.write(id.getBytes());
       out.close();
    }
    
    }

    您可以在步骤1中看到更多内容:

    步骤2:打开应用商店中的任何应用


    第三步:点击任何应用程序并查看浏览器链接,最后,id=com.facebook.katana&hl=en将出现,包名是您的android应用程序id

    字符串appId=BuildConfig.APPLICATION\u ID

    App Id=com.whatsapp

    要获取AppId(或包名,有些人是这么说的),只需调用以下命令:

    但请确保使用应用程序id路径导入
    BuildConfig

    BuildConfig.APPLICATION_ID 
    

    每个已安装的应用程序都有一个唯一的id…是否可以从其他应用程序获取应用程序的唯一id不是吗
    getApplicationContext().getPackageName()
    ?假设您有版本或调试之类的生成类型,并且添加了后缀,例如“debug”,以将其与主应用程序区分开来,在这种情况下,getpackageName()将为您提供originalpackagename.debug2不同的应用程序使用相同的包名意味着,应用程序可以共享数据?…否。如果两个应用程序具有相同的shareUserId,并且使用相同的签名签名,则可以共享数据。包名称不是问题。如果我想显示应用程序列表,并且需要像所有列表适配器一样将id设置为整数,该怎么办?我可以使用安装时间,但它的类型很长。将其转换为int仍然有用吗?通过build.gradle设置包名时,包名并不总是applicationId!实际上,
    Context.getPackageName()
    确实返回应用程序ID而不是包名(尽管它们通常是相同的)。该方法的名称有些混乱,是遗留的。来源:Context::getPackageName不起作用如果您使用kotlin,它会返回“函数getPackageName(kotlin反射不可用)”如果您正在编写Android库,这将不会太有用。我使用它在我的Espresso测试中获取applicationId:private val targetContext=instrumentation.getTargetContext()private val applictionId=targetContext.getPackageName()@SimonFeatherstone你知道如何从模块中执行此操作吗?@MihaiFischer你需要创建一个函数来初始化模块/库,然后传入此类信息。