所以在4.3中有一个系统应用程序的概念.放入的APK /system/app被授予系统权限.从4.4开始,有一个新的"特权应用程序"概念.特权应用程序存储在/system/priv-app目录中,似乎有不同的对待.如果你查看下面的AOSP源代码PackageManagerService,你会看到新的方法,如
static boolean locationIsPrivileged(File path) {
try {
final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
.getCanonicalPath();
return path.getCanonicalPath().startsWith(privilegedAppDir);
} catch (IOException e) {
Slog.e(TAG, "Unable to access code path " + path);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以这里是一个不同的情况的例子.
public final void addActivity(PackageParser.Activity a, String type) {
...
if (!systemApp && intent.getPriority() > 0 && "activity".equals(type)) {
intent.setPriority(0);
Log.w(TAG, "Package " + a.info.applicationInfo.packageName + " has activity "
+ a.className + " with priority > 0, …Run Code Online (Sandbox Code Playgroud) 当您安装来自未知来源的apk文件时,Android会抱怨并验证您是否要安装该apk文件.必须将此文件检查到已知来源列表.
我很想知道Android AOSP上已知来源列表的位置.
编辑:如果我的问题令人困惑,我道歉,但请允许我澄清一下.当您从USB或电子邮件安装APK时,Android会提示您说您正在安装来自未知来源的应用.此时,您可以拒绝或接受这一事实并继续前进.为了确定是否从未知来源安装应用程序,我假设有一个AOSP附带的已知来源列表.我可能错了,正如一条评论指出,它只是所有未从Google Play商店安装的应用程序.
我想知道这项检查的去向.如果没有列表,则在AOSP中进行此检查,如果有列表,则在此已知来源列表的位置.
有没有办法假装我通过USB插入的Android设备的调用?使用ADB触发呼叫的一些方法?如果是这样,我该怎么办?
我觉得这可能是一个重复的问题,但我找不到它的问题.这是最接近的问题,但它只与模拟器有关.
这是我尝试过的一些事情.我想执行以下命令的反向:
adb shell am start -a android.intent.action.CALL tel:1112223333
Run Code Online (Sandbox Code Playgroud)
就像其他人在我上面提到的问题中所说的那样.除了我想在设备上执行此操作,而不是在模拟器中执行此操作.对于我正在做的工作,模拟器不足以测试电话,我只能在实际设备上运行我的测试.我们的"解决方案"没有模拟器支持.
所以通常我会使用模拟器的端口远程登录到本地主机,但我不能这样做,所以我可以telnet到插入的设备吗?有没有办法在插入的设备上伪造来电?
为了解释我为什么要这样做,我现在正在修改AOSP.目前我们还没有修改模拟器来处理我们的更改,但我们正在对电话进行修改.最终使模拟器工作将是重要的,但此时如果我们可以使用我们有权访问的设备测试使用虚假呼叫的电话,那将是理想的.
完全有可能这甚至不可能,但如果有人有这方面的经验,我很想知道.我觉得在向公众发布设备之前,应该在设备上伪装电话进行某些测试.
我想找出是否有可能确定屏幕是否在使用ADB的Android设备上.我需要知道一些我试图使用猴子跑步者进行的测试.是否有一个我可以输入的shell命令,因此包含作为猴子跑步者命令的一部分,它将明确地告诉我屏幕是打开还是关闭?
在 Android 中,有没有办法检查给定文件是否是媒体播放器的合法文件?这是我目前测试文件在媒体播放器中是否可播放的方法。
public boolean isPlayable(File file){
try {
Uri uri = Uri.fromFile(file);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(this, uri);
player.reset();
return true;
} catch (Exception e){
Toast.makeText(this, "Invalid File: " + file.getName(), Toast.LENGTH_SHORT).show();
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用异常进行测试,基本上如果它抛出异常,那么就会出现问题,我们不应该播放该文件。对我来说,这似乎不是很干净,即使它似乎可以很好地完成工作。有没有更好的方法来看待这个问题?我只想知道在尝试将文件插入媒体播放器之前,文件是否会引发异常。
我正在研究系统应用程序,我需要以编程方式了解应用程序能够处理的意图.我已经看到了与此相关的其他问题,但它们似乎都没有答案,但似乎也没有关注系统权限.
PackageManager似乎只提供查询给定intent的活动的方法.我无法找到一种方法来获取给定活动的意图.
例如,如果我有一个具有如此定义的intent过滤器的活动:
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我知道活动类名和包名,我想从包管理器(或任何其他来源)中找出它可以处理的意图(在这种情况下,BOOT_COMPLETED和USER_PRESENT).
我正在寻找一种在Android中获取当前活动用户的方法。我正在构建一个系统应用程序,以便可以使用隐藏方法,但是具体来说,它必须是当前的ACTIVE用户,而不是给定进程的用户。
例如,如果您使用ADB安装应用,则该过程将表明用户ID是所有者。这意味着UserHandle.myUserId()无法满足我的需求:(
根据我对java的了解,我不认为这是可能的,但我想向那些知识远远超过我的人提出这个问题.
如果我有一个静态变量说,
public static String NAME = "james";
Run Code Online (Sandbox Code Playgroud)
有没有办法,通过反射或其他方式,为所述变量创建一个监听器,以便如果其他人调用:
ClassName.NAME
Run Code Online (Sandbox Code Playgroud)
它可以在得到结果之前修改,所以我可以改变NAME的值,使它等于"simon"而不是?
要清楚,这个代码库不是我自己的,我不能改变变量而是使用getter和setter.我知道这会使这更简单,但不幸的是,这不是一个选择.
想知道如何在不使用清单文件的情况下创建SMS广播接收器。例如,这是我当前的清单文件行:
<receiver android:name="com.paradopolis.randomnotifications.SMSListener">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
并且工作正常,但是我希望能够删除线路并在服务中注册我的广播接收器,例如:
registerReceiver(new SMSListener() , [?????]);
Run Code Online (Sandbox Code Playgroud)
但我找不到要使用的Intent过滤器,因为SMS_RECEIVED是Telephony软件包的一部分。所以问题是:意图过滤器是什么?
我正在使用Google Maps API V2,我想知道是否有一种方法可以区分用户何时与地图交互以移动或缩放相机,以及何时调用animateCamera方法。
我想要做的是让用户将地图中心放在其上,直到他们放大或拖走地图为止,这时我想让用户完全控制。
我的问题是,当用户移动地图以及为地图设置动画时,都会调用onCameraChange。我该怎么解决?
android ×9
adb ×2
java ×2
apk ×1
google-maps ×1
monkeyrunner ×1
multi-user ×1
telephony ×1
testing ×1