这让我坚持了一段时间.
有没有办法可靠地检测是否在Android应用程序中按下了主页按钮?
如果不这样做,是否有一种强有力的方式来告诉导致活动进入onPause的原因?即我们可以检测它是由新活动启动还是按回/ home引起的.
我看到的一个建议是覆盖onPause()并调用isFinishing(),但是当按下主页按钮时,这将返回false,就像新活动开始时一样,因此无法区分这两者.
任何帮助非常感谢.
**更新**:感谢@ android-hungry这个链接:http://nisha113a5.blogspot.com/
覆盖以下方法:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Run Code Online (Sandbox Code Playgroud)
然后,以下事件将被触发按下主页按钮:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
Run Code Online (Sandbox Code Playgroud)
我不确定这条线是否有任何副作用:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
Run Code Online (Sandbox Code Playgroud)
因此,与普遍的看法相反,您实际上可以听取主键.令人担忧的是,您可以返回false并让home键不执行任何操作.
更新:正如预期的那样,这有一些副作用 - 在启用此模式的情况下,嵌入式视频和谷歌地图似乎不可见.
更新:据说这个hack不再适用于Android 4.0以上版本
我知道android:windowSoftInputMode清单属性可以使用以下方法以编程方式设置:
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Run Code Online (Sandbox Code Playgroud)
有没有办法以编程方式获得此值?我没有看到相应的getter方法.
我正在实施几个Android应用程序,这些应用程序将在Google Play上推出,并且他们都使用Google IAP自动续订订阅产品类型进行订阅.
要测试应用程序,我已完成以下操作:
已将草稿二进制文件上载到Google Play但未发布.
在开发人员控制台中创建并发布了Subscription产品.
将我的Google帐户添加到开发者控制台中的测试帐户列表中
从eclipse导出我的APK(与上传到Google Play的包名和版本名称/代码相同)
在我的测试设备上安装了此导出的APK,该设备已使用测试帐户登录.
我现在能够成功测试我的购买,每件事都有效.但是,据我所知,这次购买是真实的,订阅实际上是整整一个月都有效.
有没有办法进行任何类型的"沙盒"测试,或者至少是一种过早取消此订阅的方法?
如何在不必等待一个月的情况下测试我的订阅已过期的场景?!
任何帮助深表感谢!
我创建了一个需要与自签名SSL服务进行通信的phonegap应用程序.
我在res/xml/cordova.xml中将我的URL列入白名单,如下所示:
<access origin="https://www.mydomain.com" subdomains="true" />
当我从eclipse运行和构建时,这工作正常,但如果我然后导出并签署我的应用程序并手动安装APK,那么该应用程序无法与我的Web服务进行通信.
与服务器的通信使用Sencha Touch库进行,如下所示:
Ext.Ajax.request({
url: 'https://www.mydomain.com',
method: 'get',
success: function(result) {
},
failure: function(result) {
}
});
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢
我正在开发一个视频通话应用程序,我有一个"来电"屏幕,当有人打电话时,它会提醒用户.此屏幕是由传入GCM触发的活动,并且在清单中设置了noHistory ="true"并且showOnLockScreen ="true",以便用户可以在不必解锁其设备的情况下参与呼叫.
如果用户选择接听电话,我会启动另一项活动以参与实际通话.但是,在我启动第二个活动之前,我会检查是否存在必要的权限(摄像头,麦克风等),如果没有则请求它们.
这就是出现问题的地方.
问题1:
系统显示的权限请求对话框导致我的活动进入onPause.我相信因为这个对话框实际上是一个活动.
由于此处启动了新活动,因此使用noHistory ="true"表示我们的活动会立即被杀死.从技术上讲,这是故意行为,事实上Android团队已经解决了这个问题:
https://code.google.com/p/android-developer-preview/issues/detail?id=2915
我可以通过在onPause中手动管理并检测是否有任何未完成的权限请求处于等待状态来解决此问题.
问题2: 解决问题1后,我进入第2阶段.
现在请求权限时,我的活动不再被杀死但是设备只是回到锁定屏幕而我没有看到权限对话框.
如果我然后解锁设备,欢迎,我看到我的活动和请求权限对话框覆盖在顶部.这种用户体验令人不快.
视频:https://youtu.be/cobINQ9e2GY
我猜测请求权限的活动没有将showOnLockScreen属性设置为true,因此如果它在屏幕锁定时启动,则不会显示.
那么,最重要的问题是,我们可以优雅地从允许在锁定屏幕上显示的活动中请求权限吗?
我的直觉是不,我们无法在没有回到锁定屏幕的情况下显示权限对话框.然而,对我来说可接受的折衷方案是提示用户解锁设备/即显示引脚输入屏幕.
问题2:问题2:
我们能否以编程方式显示屏幕锁定时显示的活动的引脚解锁屏幕?
permissions android android-permissions android-6.0-marshmallow
我在android中创建了一个自定义视图,扩展了View.我重写onDraw()方法并在那里绘画到画布 - 没问题.
我知道我也应该覆盖onMeasure()方法并使用我想要的尺寸调用setMeasuredDimension(width,height).
我注意到如果我在代码中定位断点,onMeasure()会在onDraw()之前触发.
现在我的问题是,在onDraw完成执行之前,我不知道我的视图所需的高度.我的高度从默认值100开始,然后在onDraw结束时设置 - 但是之前已经执行了onMeasure,所以我的View只有100 px高.
如何设计我的视图以便在onDraw()之后重新测量它,以便可以动态确定视图的高度?
我的一个应用程序遇到了一个非常令人沮丧的问题.
我有一个splashscreen活动,它为我的应用程序加载一些初始数据,然后启动主要活动并完成自己.
主活动运行后,我通过按主页键来设置应用程序,然后终止我的应用程序.
当我重新启动我的应用程序时,启动画面会尝试运行但是一旦我尝试访问我的R.java文件中的任何字段就会失败:
例如,我立即尝试设置textview的文本,如下所示:
((TextView)findViewById(R.id.splash_tv_1)).setText(application.getLanguage().pleasewait);
Run Code Online (Sandbox Code Playgroud)
这会引发以下异常:
06-29 11:18:14.661: ERROR/AndroidRuntime(21427): java.lang.NoSuchFieldError: com.pagesuite.android.reader.framework.R$id.splash_tv_1
Run Code Online (Sandbox Code Playgroud)
然后,当我再次启动它时,它很好.
如果我使用TaskKiller工具杀死应用程序,我会得到相同的行为(我知道很多用户会天真地使用我怀疑的东西)或者操作系统会杀死我的进程.
有任何想法吗?
编辑:
刚刚在logcat中注意到,就在此活动的onCreate()执行之前,会记录以下内容:
06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1945 (splash_logo) in Lcom/pagesuite/android/reader/framework/R$id;
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: dead code 0x0002-0010 in Lcom/pagesuite/android/reader/framework/activities/PS_Splashscreen;.loadLogoImg (Lcom/pagesuite/android/reader/framework/xml/appsettings/PS_AppSettings;)V
06-29 11:18:14.571: DEBUG/dalvikvm(21427): DexOpt: couldn't find static field
06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1946 (splash_tv_1) in Lcom/pagesuite/android/reader/framework/R$id;
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000
06-29 …
Run Code Online (Sandbox Code Playgroud) android ×7
cordova ×1
google-play ×1
https ×1
java ×1
ondraw ×1
permissions ×1
subscription ×1
testing ×1
view ×1
whitelist ×1