我有一个在后台运行的服务来监控前台活动。目前这个不区分用户(多用户帐户Android 4.2)。有没有办法让服务可以将它运行的用户与前台活动的用户进行比较?我只对运行该服务的同一用户帐户的活动感兴趣。
我知道我可以使用:
android.os.Process.myUserHandle()
Run Code Online (Sandbox Code Playgroud)
获取运行服务的 UserHandle。但是我在文档中看不到任何可以为我提供正在运行的活动(ActivityManager.RunningAppProcessInfo 等)的 UserHandle 的内容。
有任何想法吗?
getPackageManager().getLaunchIntentForPackage("com.example.app")我想自己创建启动意图,而不是常规方式。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage("com.example.app");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
如果 Activitycom.example.app已安装、启用且具有正确的清单,为什么 Android 找不到 Activity ?(它与getLaunchIntentForPackage.完美配合。)
我一直试图让一个Android应用程序以编程方式在SD卡上安装APK,但我遇到了一些麻烦.
这就是我这样做的方式:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType("ApkFilePath...","application/vnd.android.package-archive");
activity.startActivityForResult(intent,5000);
Run Code Online (Sandbox Code Playgroud)
现在工作正常,它带来了包管理器,我可以控制在经理完成安装APK时要做什么.
但我遇到的问题是,如果在安装结束时用户单击"打开"而不是"完成",则不会调用"OnActivityResult"方法,因为管理器仍然存在....并且关于系统的另一个要求的另一个问题.
有没有办法知道用户何时在包管理器的末尾选择了"打开",或者是否有办法强制管理器只显示我希望它显示的按钮?
真的可以使用帮助,我到处搜索,似乎没有找到解决方案
我想在Android清单中使用元数据来自定义服务的行为.
<service
android:name=".SampleService"
android:exported="false">
<meta-data
android:name="sampleName"
android:resource="@string/sampleValue" />
</service>
Run Code Online (Sandbox Code Playgroud)
我的服务是库的一部分,有些人可能会在使用我的服务时将敏感数据放入这些属性中.即使服务未导出,这些元数据属性是否可通过PackageManager对手机上的其他已安装软件包可见?
service android metadata android-manifest android-package-managers
我要求pm(包管理器)启用一些包,但是它没有启用并显示消息" new state:disabled "
shell @ android:/ $ pm启用my.app.com
打包my.app.com新状态:已禁用
奇怪......这似乎是一个错误......
搭载Android 4.0.3的三星GT-P3100
任何想法如何解决?
我想在应用程序上清理我的应用程序创建的垃圾UnInstalling.
使用ManiFest文件: -
在清单文件中添加:
<receiver android:name="com.netdoers.com.ui.CleanReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" >
</action>
<data android:scheme="package"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
创建接收器以捕获 BroadCast Event
public class CleanReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent) {
CustomToast.showToastMessage(context, "Uninstalling Application");
Log.e("Uninstall", "CleanReceiver Called");
}
}
Run Code Online (Sandbox Code Playgroud)
在Java代码: -
BroadCastReceiver br = new CleanReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addDataScheme("package");
registerReceiver(br, intentFilter);
Run Code Online (Sandbox Code Playgroud)
但是在卸载应用程序时,接收器从未被调用过.
Java和Manifest都不会在卸载应用程序时调用Receiver.如何在卸载应用程序时捕获广播事件?
我正在开发一个Android应用程序,如果用户需要,它可以安装其他应用程序(作为我的应用程序的插件).
但是,这些附加应用中的每一个都可能需要运行特定的Android版本.我想在运行时执行检查,看看我正在尝试安装的APK是否实际上与设备兼容.
现在,使用以下方法:
public PackageManager getPackageArchiveInfo(String archiveFilePath, int flags)
Run Code Online (Sandbox Code Playgroud)
我可以获得一个APK文件的信息.然而,问题是返回的信息似乎只包括APK targetSdkVersion但不包括minSdkVersion,我理解的是实际确定Android的最低版本可以安装/运行的应用程序.的targetSdkVersion,如果我理解正确的仅仅是"最佳"的版本.
所以,长话短说,如何确定Android cna是否可以在Android设备上运行?(我知道我可以在桌面上使用AAPT,但这不适用于Android本身)
我们最近向Google Play提交了我们的更新,并且有少数用户报告了他们所有数据消失的问题.
我们设法重现了一次这个问题,它是由以下原因引起的:
5787 08-17 12:50:56.309 937 1030 W PackageManager: Code path for pkg : com.attidomobile.passwallet changing from /data/app/com.attidomobile.passwallet-2 to /data/app/com.attidomobile.passwallet-1
5789 08-17 12:50:56.309 937 1030 W PackageManager: Resource path for pkg : com.attidomobile.passwallet changing from /data/app/com.attidomobile.passwallet-2 to /data/app/com.attidomobile.passwallet-1
Run Code Online (Sandbox Code Playgroud)
请注意,这与Android App更新中pkg的资源/代码路径更改不同.我们正在ProGuarding我们的应用程序,但它正在安装的实际文件夹正在改变.
有没有人经历过这个,或者知道PackageManager改变代码/资源路径的原因?
我发现这篇文章描述了预装应用程序的更新过程,它似乎与正在发生的事情相匹配,但我们的应用程序不是预安装的应用程序:
http://debuggingisfun.blogspot.co.uk/2014/09/android-3rd-party-application-as-system.html
我们经历了版本之间的变化,并没有发生重大变化; 清单中唯一的变化是版本号,以及代码中的一些逻辑变化.
我们以前从未见过这个问题我们以前的任何应用更新(并且有很多,应用程序将近3年,这是更新38).
有人可以告诉我为什么这会给我变量nullintent吗?
public class MainActivity extends AppCompatActivity {
private static String action = "com.google.android.youtube";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onResume() {
super.onResume();
this.launch();
}
public void launch() {
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(action);
System.out.println("debug: " + intent);
//startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
我在 Pixel 4 上测试了这个,但我从来没有卸载 YouTube。另外,sidequest 列出了应用程序并给了我包com.google.android.youtube
我想检测应用程序的安装源。
在Android上我们可以使用两种方法来检测安装源:PackageManager#getInstallerPackageName(String)或PackageManager#getInstallSourceInfo(String)。这两个调用都将返回安装程序应用程序的包名称。例如:
com.amazon.veneziacom.android.vending我的问题是,对于从华为应用市场安装的应用程序,此方法会返回什么?
android android-package-managers huawei-mobile-services appgallery huawei-developers