Articles of 安卓

如何通过服务在外部显示器上设置窗口?

Android在API级别17(Android 4.2)中添加了Presentation ,以支持在外部Display上显示内容,例如通过HDMI,MHL,Miracast或SlimPort连接的电视或显示器。 但是, Presentation扩展了Dialog ,所以它只能从一个Activity 。 而且,据我所知,这是故事的结尾。 但是, 这个StackOverflow的答案暗示了一种可能的方式,通过从该Context创build的createDisplayContext()和WindowManager来使用服务中的外部Display 。 然后,该WindowManager上的addView()方法应该将View渲染到指定的Display 。 如果这可以起作用,它真的打开了外部显示器的有趣使用的大门,例如在电视机上播放video,同时能够在设备自己的触摸屏上使用不相关的应用程序(例如,Web浏览器)。 但是,该答案掩盖了一个关键细节:如何为addView()调用设置WindowManager.LayoutParams 。 特别是, type字段中有一些令人眼花缭乱的TYPE_值。 我已经两次尝试坠毁,但有不同的信息: TYPE_APPLICATION导致android.view.WindowManager$BadTokenException: Unable to add window — token null is not for an application TYPE_APPLICATION_MEDIA导致android.view.WindowManager$BadTokenException: Unable to add window — token null is not valid; is your activity running? android.view.WindowManager$BadTokenException: Unable to add window — token null […]

抛出IOException时,是否需要使用HttpURLConnection的错误stream?

根据Oracle Java技术指南,抛出IOException时,应该使用HttpURLConnection的错误stream http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html 你能做什么来帮助保持活力? 不要忽视响应主体而放弃连接。 这样做可能会导致空闲的TCP连接。 当他们不再被引用时,这需要被垃圾收集。 如果getInputStream()成功返回,则读取整个响应主体。 当从HttpURLConnection调用getInputStream()时,如果发生IOException,请捕获exception并调用getErrorStream()来获取响应正文(如果有)。 即使您对响应内容本身不感兴趣,读取响应主体也会清除连接。 但是,如果响应正文很长,并且在看到开始部分后对其余部分不感兴趣,则可以closuresInputStream。 但是你需要知道更多的数据可能正在发展中。 因此连接可能不会被清除以供重用。 以下是符合上述build议的代码示例: 这是代码示例 try { URL a = new URL(args[0]); URLConnection urlc = a.openConnection(); is = conn.getInputStream(); int ret = 0; while ((ret = is.read(buf)) > 0) { processBuf(buf); } // close the inputstream is.close(); } catch (IOException e) { try { respCode […]

Android分析v4最简化

我正尝试以最简单的方式将Google Analytics(分析)连接到我的应用程序。 我想实施分析v4,因为google说他们会尽快升级到它,所以我不想做两次相同的工作。 在这种情况下,Google的教程效率不高。 把他们在那里说的和我在互联网上find的东西合并起来,我做了这些步骤: 在Android Manifest中,我添加了这个权限: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 而这个,在Application标签下: <meta-data android:name="com.google.android.gms.analytics.globalConfigResource" android:resource="@xml/analytics" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 我不确定第二元的必要性 我写了一个名为“analytics.xml”(/ res / xml /)的xml文件,其中包含: <!– the Local LogLevel for Analytics –> <string name="ga_logLevel">verbose</string> <!– Treat events as test events and don't send to google –> <bool name="ga_dryRun">false</bool> <!– <integer name="ga_sessionTimeout">300</integer> –> […]

展讯(供应商ID 1782)连接到adb的问题

我有一台手机,在Mac上被adb检测到,但不是在我的机器上。 通过“未检测”,我的意思是它显示在lsusb,但“adb设备”报告设备的空白列表: adb devices List of devices attached 我已经尝试了以下内容: 切换USB电缆 确保设备处于USBdebugging模式 出厂重置设备 将供应商ID(1782)添加到/etc/udev/rules.d 将条目添加到〜/ .android / adb_usb.ini文件中(这是否有必要?) 多个adb start-server和adb kill-server序列 多次重启(和“sudo udevadm control –reload-rules”) 运行“android update adb”,擦除〜/ .android / adb_usb.ini中的条目 相关信息: 运行Ubuntu 14.04 在插入设备时添加的lsusb条目: Bus 003 Device 003: ID 1782:5d01 Spreadtrum Communications Inc. 在/etc/udev/rules.d/51-android.rules内部行: SUBSYSTEM=="usb", ATTR{idVendor}=="1782", MODE="0666", GROUP="plugdev" 输出tail -f / var / log / […]

将LatLng向另一个LatLng移动5米

我可以使用什么algorithm/公式计算距离另一个LatLng点5米的LatLng点? 我试图用2个LatLng参数编写一个函数,让它返回一个LatLng,它距离第一个LatLng和第二个LatLng的方向是5米。

Android 4.4.4 Moto G蓝牙LE重新连接问题

我有一个应用程序,在运行Android 4.3的三星S3上效果很好,但是我在运行4.4.4的Moto G上遇到了问题 我的BLE外围设备在应用程序使用期间连接和断开多次。 这工作正常,但有时有一个点,应用程序/手机不再重新连接到外设。 所有的gatt命令都在主线程上运行,例如。 final BluetoothGatt gat = gatt; Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { // This code will be executed on the main thread if (Looper.myLooper() == Looper.getMainLooper()) { Log.e(TAG, "mGattCallback disconnect2: NOW ON MAIN THREAD :)"); } gat.disconnect(); } }); 和外设断开罚款。 当发生这种情况,我不能重新连接到外设了,我得到这样的日志负载: 04-07 16:57:56.798: […]

在androidtesting中的System.out.println

我已经在Android Studio中创build了简单的testing。 它只是hello from test打印hello from test ,比较1和5 package com.example.maks.firstapp.test; import android.test.InstrumentationTestCase; public class ExampleTest extends InstrumentationTestCase { public void test() throws Exception { System.out.println("hello from test"); final int expected = 1; final int reality = 5; assertEquals(expected, reality); } } 我运行它,但没有看到你hello from test任何地方的hello from test 。 输出: Running tests Test running started junit.framework.AssertionFailedError: expected:<1> […]

在Android Studio中抑制Gradle警告?

我在Android Studio中收到以下警告: Warning:Dependency org.json:json:20140107 is ignored for release as it may be conflicting with the internal version provided by Android. In case of problem, please repackage with jarjar to change the class packages 我无法删除依赖项,因为我在一个依赖项目中使用它。 我怎样才能在Android Studio中抑制上面的Gradle警告?

Android“付款方式已被拒绝”的每种付款方式

我正在尝试使用Android实现应用内结算,但是我收到了一个奇怪的错误,并且找不到任何人在线遇到类似的问题。 我做了以下: 将带有开帐单权限的APK上传到Alpha版本。 添加Google小组进行testing,以我的个人Gmail帐户作为成员。 去URL中的select,成为一个testing人员。 将我的个人Gmail帐户添加为启用testing的帐户(在设置>帐户详细信息中)。 创build一个非消耗品并将其设置为“活动”。 等了24小时。 在我的手机上签署一个发布版本。 当我按下“买入”button时,它会打开商店对话框,其中显示“这是一个testing订单,您不会被收取费用”。 目前为止似乎都不错,但每种付款方式都表示“这种付款方式已被拒绝”。 所以我无法继续。 这包括Google Play余额,Amex卡,Visa和PayPal帐户。 我已经尝试了以下,他们都没有工作: 使用其他Google帐户进行testing付款。 从开发人员控制台设置中的testing帐户列表中删除我的帐户,以尝试与“真实”交易一起使用。 尝试了不同的设备。 试图创build一个不同的产品。 有什么想法可能是错的?

Google Analytics(分析)为我的Android应用程序提取了错误的版本号

我在我的应用程序中添加了Google Analytics。 当我去Real Time > Overview我看到1.0 App Version 。 我的问题是Google Analytics从哪里获取这个1.0号码? 这就是我在启动器Activity的onCreate()中启动Google Analytics的方法: analytics = GoogleAnalytics.getInstance(MainDrawerActivity.this); analytics.setLocalDispatchPeriod(1800); tracker = analytics.newTracker("UA-XXXXXX-X"); // Replace with actual tracker/property Id tracker.enableExceptionReporting(true); tracker.enableAdvertisingIdCollection(true); tracker.enableAutoActivityTracking(true); 我的项目有多个gradle文件。 我在这里粘贴他们: 这是我的gradle文件,也是我的Android Manifest: build.gradle :(对于我的Project:xxx …) buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.1.3' // NOTE: Do not place your application dependencies here; […]