如何获取Android应用程序id?
在Android中,我如何通过编程(或其他方法)获取应用程序的id,以及如何使用该id与其他应用程序通信?我不确定您指的是什么“应用程序id”,但对于应用程序的唯一标识符,您可以使用:如何获取Android应用程序id?,android,Android,在Android中,我如何通过编程(或其他方法)获取应用程序的id,以及如何使用该id与其他应用程序通信?我不确定您指的是什么“应用程序id”,但对于应用程序的唯一标识符,您可以使用: 当前活动中的getApplication().getPackageName()方法,PackageInfo.sharedUserId字段将显示清单中分配的用户Id 如果希望两个应用程序具有相同的用户ID,以便它们可以看到彼此的数据并在同一进程中运行,则在清单中为它们分配相同的用户ID: android:share
当前活动中的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开发者的一篇优秀文章中回顾现有的可能性:
用于在安装后第一次运行应用程序时创建id,然后进行简单检索UUID.randomuid()
- 实际设备标识符的
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你需要创建一个函数来初始化模块/库,然后传入此类信息。