专业密钥的许可证检查

2024-04-13

因此,我想制作一个加载了完整功能的免费应用程序。在应用程序检测到许可的专业版密钥之前,专业版功能将被禁用。当然,我想让专业密钥使用 LVL 检查其许可证。虽然到目前为止我知道如何正确做事,但我不知道如何使专业版密钥与应用程序进行通信以启用专业版功能。

这是主应用程序代码(com.test.mainapp):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    context = getApplicationContext();

    final PackageManager pacman = getPackageManager();
    final int signatureMatch = pacman.checkSignatures(getPackageName(),
            "com.test.mainapp_key");

    if (signatureMatch == PackageManager.SIGNATURE_MATCH) {
        Toast.makeText(context, "Pro key detected!", Toast.LENGTH_SHORT)
                .show();
    } else {
        Toast.makeText(context, "Free version", Toast.LENGTH_SHORT).show();
    }
}

虽然这可以阻止其他人为我的应用程序制作假密钥,但他们仍然可以在线与其他人共享密钥应用程序并且它会起作用。因为我们无法从另一个应用程序进行 LVL 检查,所以我希望许可证密钥应用程序检查它自己的许可证,如果正确,只有这样用户才能获得专业功能。我怎样才能让许可证密钥应用程序和主应用程序像这样相互通信?

例如,我想要实现的功能就像 Titanium Backup 所做的那样。


您可以在主应用程序和关键应用程序之间发送意图。如果您在密钥应用程序中使用 LVL,则回调示例如下:

private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
    public void allow() {
        Log.i("Key", "License Accepted");
        Intent i = new Intent();
        i.setAction("intent.to.call.on.success");
        i.putExtra("licenseresult", 0);
        c.sendBroadcast(i);
        mChecker.onDestroy();
    }

    public void dontAllow() {
        Log.e("Key", "License Denied");
        Intent i = new Intent();
        i.setAction("intent.to.call.on.failure");
        i.putExtra("licenseresult", 1);
        c.sendBroadcast(i);
        mChecker.onDestroy();
    }

    public void applicationError(ApplicationErrorCode errorCode) {
        Log.i("Key", "LR Error");
        Intent i = new Intent();
        i.setAction("intent.to.call.on.error");
        i.putExtra("licenseresult", 2);
        c.sendBroadcast(i);
        mChecker.onDestroy();
    }
}

您将在两个应用程序中设置广播接收器来启动许可证检查并处理结果。例如

public class License extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equals("intent.called.to.initiate.request")) {
                // Initiate the license request here (possibly using a service)
        return;
    }
}

} 

您应该使用基于证书的权限来限制对意图的访问,以防止其他应用程序能够发送欺骗性的“许可证成功”意图。

http://developer.android.com/reference/android/content/BroadcastReceiver.html#Permissions http://developer.android.com/reference/android/content/BroadcastReceiver.html#Permissions

简洁版本。

在清单中定义权限

< permission android:name="my.package.LicenseCheck" android:protectionLevel="signature"/> 

在接收者声明中使用权限:

<receiver android:name="name.of.your.receiver" android:permission="my.package.LicenseCheck"> 
<intent-filter>
    <action android:name="name.of.intent"/>
</intent-filter>
</receiver>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

专业密钥的许可证检查 的相关文章

  • 如何正确显示AChartEngine条形图

    我在用图表引擎 1 0 1 最新 并想演示一个条形图 这就是我要的 我想要的图表 到目前为止我所取得的成就 1 1 view 缩小视图 问题 图表的左右部分在 1 1 视图中丢失 酒吧之间的距离是如此之远 我需要减少它 该栏未正确位于文本标
  • 如何减少Android中CheckBox的宽度和高度

    谁能告诉我如何减少 CheckBox 的宽度和高度 以便在 Android 中显示非常小的 CheckBox 提前致谢 只需像使用普通按钮一样使用 setWidth w 和 setHeight h 函数即可
  • Android:检查是否必须询问运行时权限

    我想检查特定应用程序是否需要在运行时处理 Android Marshmallow 运行时权限 下面的假设正确吗 Checks whether runtime permissions must be handled or not param
  • 进度条中形状的填充

    我正在使用 xml 文件来定义进度条 我在背景形状上定义了填充 但这个设置有时会正确显示 有时则不能 因此 如果我启动内部带有进度条的应用程序或活动 则会正确显示带有背景和 填充 进度的进度条 然后我关闭我的应用程序并再次启动它 并且 进度
  • Phonegap(3.0.0) 相机第一次尝试不成功

    出于测试目的 我复制了在音隙相机 API http docs phonegap com en 3 0 0 cordova camera camera md html Camera我发出警报onPhotoDataSuccess测试函数何时被触
  • 使用kivy/python访问android手电筒(相机LED闪光灯)

    我不知道如何使用 python 或 kivy 访问 android 上的 led 灯 我尝试安装 python for android 以便能够将 android 模块导入到我的代码中 但不是找不到模块 我按照此处的说明克隆了 python
  • 如何在不清除和闪烁地图的情况下刷新谷歌地图上的标记位置?

    是否可以创建无需闪烁 清除整个地图即可更新的 Google 地图 V2 标记 目前我必须清除地图然后添加标记 googleMap clear googleMap addMarker new MarkerOptions position en
  • android 弹出菜单文本颜色(AppCompat)

    我需要更改 popuo 菜单的文本颜色 但我找不到任何方法来执行此操作 我可以更改 popomenu 的背景但不能更改文本 我以这种方式编辑 style xml
  • 如何处理 Jetpack Compose 中的导航?

    在 Jetpack Compose 中 导航应该如何完成 所有 并不多 示例 包括来自 Google 的官方示例 都使用密封类并加载新屏幕以响应观察当前屏幕的变化 这确实 有点 有效 但不提供导航返回堆栈 并且手机的后退按钮完全不知道 只是
  • android中viewpager中的多个视频播放器

    我想在 viewpager 中的不同片段上播放视频 我为每个片段使用多个媒体播放器和表面视图 当我向左或向右滑动时 我也想暂停和开始视频 滑动到下一个视频完全没有问题 但是当我滑动到上一个视频 已经在播放 时 表面视图重叠 同时 我可以毫无
  • getRunningAppProcesses 在 Android L (5.1.1) 上返回空列表 [重复]

    这个问题在这里已经有答案了 我刚刚测试了我的应用程序和 CM ATM Android Assistant 等 它们都无法获取正在运行的进程列表 但它们在预操作系统版本上运行良好 那么 Android L 5 1 1 发生了什么 请帮忙 am
  • 在主线程中处理某些代码时如何显示进度对话框(在单独的线程中?)

    我需要执行以下操作 当应用程序启动时 它会运行一项活动 splashActivity 该活动尝试创建一个 DBHelper SQLiteDatabase 实例 该实例在创建时检查数据库是否存在 如果不存在则创建一个 在此数据库创建过程中 我
  • 华为移动服务的 Android 虚拟设备

    我想将HMS应用到我的应用程序中 然而 购买真正的华为手机并不在我的候选清单上 华为是否为此目的提供 Android 虚拟设备 如果没有 如何测试我的 HMS 实现是否真正有效 是的 华为确实提供了一个 Android 虚拟设备 名为App
  • 如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?

    如何使用远程 URL 在 Android 模拟器中播放 mp4 视频 我使用了以下代码 但此代码给我错误 抱歉 该视频无法播放 07 05 16 58 19 525 INFO AwesomePlayer 34 mConnectingData
  • Android WebView setCertificate 问题 SSL 问题

    我看过很多关于 SSL 错误的帖子和信息 并且我自己也偶然发现了一个 我尝试使用 GlobalSign CA BE 证书通过 Android WebView 访问网页 但收到不受信任的错误 对于大多数手机来说 处理这个问题效果很好 只需告诉
  • 使android listview布局可滚动

    我有一个 xml 文件 其布局为 ASCII 形式 ImageView TextView List
  • 膨胀类 android.support.v7.internal.widget.NativeActionModeAwareLayout 时出错

    如果您以前解决过这个问题 请有人帮助我 我正在尝试使用材料设计制作一些东西 以便应用程序可以运行到 API 10 的低版本 我的代码中没有任何错误 但我不断收到此错误 Android 日志猫 06 01 05 05 37 414 E And
  • 启动 Activity 时自动弹出键盘

    我有一个相对简单的问题 我有一个包含很多 EditText 的活动 当我打开活动时 它会自动聚焦到第一个 EditText 并显示虚拟键盘 我怎样才能防止这种情况发生 在 XML 文件的布局标签中使用此属性 android focusabl
  • 有没有办法检测apk是否存储在SD卡上?

    有没有办法检测apk是否存储在SD卡上 如何 使用 getApplicationInfo sourceDir http developer android com reference android content pm Applicati
  • 如何获取特定 GLSurfaceView 的 EGL 显示/上下文

    这是后续我原来的问题 https stackoverflow com questions 6509588 egl vs gles 2 0 on android e g java 这可能太宽泛 而这个可能太具体 但也许我可以应用牛顿法 我的具

随机推荐

  • Android Studio 与 ndk 和 googletest

    我正在尝试设置我的 CI 服务器以与 Android Studio 一起使用 我希望通过新的 UI 运行 NDK 的单元测试 我正在使用 GoogleTest 当我从命令行构建时 gcov 可以完美地实现代码覆盖率 我遇到的问题是 UI 中
  • 当名称的开头保持相同而结尾不同时,将 CSS 样式应用于 ID 元素

    在 WordPress 中 博客文章的标题通常使用 ID 元素进行格式化 该 ID 元素由永远不会变化的前缀 例如 post 组成 后跟 WordPress 生成的可变数字后缀 对应于唯一的连续帖子编号 每个帖子 在 WordPress 主
  • 根据其中一个字段对元组进行排序

    我的问题与下面的问题相同 但答案很模糊 我不明白如何进行 将 List 从最高到最低排序 https stackoverflow com questions 4017728 sort a listtuple from highest to
  • 将 JSON 数据的 NSString 转换为 NSArray [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个N
  • 多线程和CPU缓存

    我正在使用多个线程在 C 中实现图像过滤操作 并使其尽可能优化 但我有一个问题 如果线程 0 访问内存 并且同时线程 1 访问同一内存 它会从缓存中获取它吗 这个问题源于这两个线程可能运行在 CPU 的两个不同内核中的可能性 因此 另一种说
  • 假设没有非时间指令,“xchg”是否包含“mfence”?

    我已经看过了这个答案 https stackoverflow com a 50279772 391161 and 这个答案 https stackoverflow com a 19099164 391161 但似乎都没有清楚明确地说明等价或
  • Intellij IDEA:未命中断点,并显示为灰色

    在 Mac OS X 上运行 JDK 1 7 时 我的项目上的断点突然不起作用 并且显示为灰色 他们今天早些时候在工作 所以不确定我做了什么导致了这种情况 我正在使用 Intellij 13 1 3 为什么断点会像这样停止工作 天哪 我刚刚
  • php数组计数与动态结果

    我正在尝试计算从脚本返回的数组的结果 有两种情况我可以找回选项a是 Array Id gt 1779 SupplierId gt 1809 SupplierName gt cccccc 和第二个选项 ib Array 0 gt Array
  • 在delphi中禁用窗体大小调整

    有什么方法可以阻止用户调整表单大小吗 目前我正在使用 当表单大小改变时 MainForm Height 761 MainForm Width 777 但这看起来很可怕 因为当用户尝试更改表单大小时它会闪烁 固定尺寸很简单 你有两个选择 De
  • Cassandra Nodetool URISyntaxException:“索引 7 处的 IPv6 地址格式错误”

    Cassandra nodetool 更新 OpenJDK 后抛出错误 nodetool status nodetool Failed to connect to 127 0 0 1 7199 URISyntaxException Malf
  • 什么是托管代码和非托管代码? [复制]

    这个问题在这里已经有答案了 我发现有人说托管代码和非托管代码 有什么不同 它仅适用于 Net吗 你可以阅读这篇维基百科文章 托管代码 http en wikipedia org wiki Managed code 基本上托管代码是一个微软术
  • Box2D - b2body GetUserData 始终返回 null

    我正在尝试根据 box2d 中的 b2body 调整精灵的位置和旋转 创建主体后 我将 userData 属性设置为保存精灵和位置等的主体对象的属性 问题是在勾选方法 b gt GetUserData 中永远不会检索我放入其中的对象 你能看
  • GPS 对比加速度计计算距离

    我正在尝试实现一个健身应用程序 可以在Android 中跟踪跑步速度和跑步距离 看起来我可以使用 GPS 或加速度计来计算这些信息 由于跑步者可能会将手机放在手里 放在肩膀上或放在口袋里 所以我的第一直觉是使用 GPS 获取位置并计算跑步速
  • 如何将 SSH 密钥与 Jenkins 工作流插件结合使用

    有一个由以下执行的常规脚本Jenkins 工作流插件 https github com jenkinsci workflow plugin As 有记录的 https github com jenkinsci workflow plugin
  • 如何让 SWIG 在 C# 中处理 utf8 字符串?

    我正在编写一个可移植的 C 库 它与其他语言 java C python 绑定 我在以下人员的帮助下进行这些绑定SWIG http www swig org 我有一个用 C 编写的类 class MyClass public const c
  • 我可以对字段和构造函数参数使用相同的名称吗?

    class C T a public C T a a a 合法吗 是的 它是合法的并且适用于所有平台 它将正确地将您的成员变量 a 初始化为传入的值 a 一些更干净的人认为以不同的方式命名它们 但并非全部 我个人实际上经常使用它 具有相同变
  • 如何获取 NSString 的宽度?

    我正在尝试获取 NSString 的宽度 例如 NSString myString hello 有没有办法做到这一点 Thanks 这是一个相对简单的方法 只需创建一个具有适当字体的 NSAttributedString 并询问其大小 CG
  • Android 自定义组件中的布局未膨胀

    我在自定义视图中遇到空指针异常 源自LinearLayout 因为它找不到它的子视图 这是代码 public class MyView extends LinearLayout public MyView Context context A
  • DrawingContext.DrawLine:笔没有完全不透明度?

    当我画这样的东西时 这里只是随机画 public partial class MainWindow Window public MainWindow InitializeComponent DrawingVisual visual new
  • 专业密钥的许可证检查

    因此 我想制作一个加载了完整功能的免费应用程序 在应用程序检测到许可的专业版密钥之前 专业版功能将被禁用 当然 我想让专业密钥使用 LVL 检查其许可证 虽然到目前为止我知道如何正确做事 但我不知道如何使专业版密钥与应用程序进行通信以启用专