小编Com*_*are的帖子

具有boot_completed的运行时异常Android O.

我正在尝试在我的BOOT_COMPLETED接收器中启动一个IntentService,但在Android O(API 26)中,我得到:

java.lang.RuntimeException: 
java.lang.IllegalStateException: 
Not allowed to start service Intent { act=intent.action.update cmp=packageName.services.OwnService }: 
app is in background
Run Code Online (Sandbox Code Playgroud)

(消息在一行中,但这样更易读)

我怎么能以正确的方式做到这一点?

android bootcompleted android-broadcastreceiver android-8.0-oreo

28
推荐指数
1
解决办法
9155
查看次数

Android gradle build System.getEnv("RELEASE_PASSWORD")返回null

我遇到的问题是System.getenv()为环境变量返回null.我的密码存储在RELEASE_PASSWORD环境变量中.当我做:

$ echo $RELEASE_PASSWORD

它打印出正确的值,所以我知道变量已设置.

我最初signingConfig signingConfigs.release发布版本中设置了类型,一切都运行正常,但我需要不同的签名配置,以适应不同的产品风格.如果我对密码进行硬编码,它的工作原理就像它想象的那样.当我尝试从环境变量中读取密码时,事情就变得很糟糕.

这是某种范围问题吗?

这就是我目前所拥有的build.gradle.

android {

  ...

  signingConfigs {
    release {
      storeFile ...;
      keyAlias ...;
      storePassword System.getenv("RELEASE_PASSWORD");
      keyPassword System.getenv("RELEASE_PASSWORD");
    }

    unsigned {
      keyAlias "";
      storePassword "";
      keyPassword "";
    }
  }

  buildTypes {
    debug {
      versionNameSuffix = "-DEBUG"
    }

    release {
    }
  }

  flavorGroups "storeFront"

  productFlavors {
    def googleVariable = signingConfigs.release
    def amazonVariable = signingConfigs.unsigned

    google {
        flavorGroup "storeFront"
        signingConfig googleVariable
    }

    amazon {
        flavorGroup "storeFront"
        signingConfig amazonVariable …
Run Code Online (Sandbox Code Playgroud)

android gradle android-gradle-plugin

27
推荐指数
3
解决办法
2万
查看次数

如何在特定时刻设置android中的日历

我不想添加年份或月份.只需每天的小时,分​​钟和秒.如何使用Calendar对象来做呢?这是我的代码

// get a Calendar object with current time
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object

cal.add(Calendar.HOUR, 4);
cal.add(Calendar.MINUTE, 40);




Intent i = new Intent(this, Receiver.class);
i.putExtra("alarm_message", "O'Doyle Rules!");
// In reality, you would want to have a static variable for the request code instead of 192837
PendingIntent sender = PendingIntent.getBroadcast(this, 192837, i, PendingIntent.FLAG_UPDATE_CURRENT);

// Get the AlarmManager service
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
Run Code Online (Sandbox Code Playgroud)

java android

26
推荐指数
2
解决办法
3万
查看次数

如何查看Android Studio中尚未保存的文件?

来自Eclipse我现在使用Android Studio进行开发.在Eclipse中,始终清楚哪些文件没有保存,但在Android工作室中,我发现已保存的打开文件与未保存的文件之间没有区别.另外,如果在构建和运行时有任何尚未保存的文件,Eclipse会询问我是否要在运行之前保存这些文件.这两个功能使开发变得更加容易.

所以有人知道:

  1. 区分已保存文件和尚未在Android Studio中保存的文件的方法?
  2. 让Android Studio问我是否要在构建和运行之前保存文件的方法?

java android intellij-idea android-studio

26
推荐指数
3
解决办法
8376
查看次数

在死线程上向处理程序发送消息

我正在开发一个后台服务,在一段时间内对服务器进行轮询.关键是:我有一个调用另一个服务的IntentService(称为NotificationsService),但是这个请求的响应没有回来.并在logcat中出现:

06-19 05:12:00.151: W/MessageQueue(6436): Handler (android.os.Handler) {416659f0} sending message to a Handler on a dead thread
06-19 05:12:00.151: W/MessageQueue(6436): java.lang.RuntimeException: Handler (android.os.Handler) {416659f0} sending message to a Handler on a dead thread
06-19 05:12:00.151: W/MessageQueue(6436):   at android.os.MessageQueue.enqueueMessage(MessageQueue.java:196)
06-19 05:12:00.151: W/MessageQueue(6436):   at android.os.Handler.sendMessageAtTime(Handler.java:473)
06-19 05:12:00.151: W/MessageQueue(6436):   at android.os.Handler.sendMessageDelayed(Handler.java:446)
06-19 05:12:00.151: W/MessageQueue(6436):   at android.os.Handler.post(Handler.java:263)
06-19 05:12:00.151: W/MessageQueue(6436):   at android.os.ResultReceiver$MyResultReceiver.send(ResultReceiver.java:50)
Run Code Online (Sandbox Code Playgroud)

我在这里看到类似的问题,但我感到困惑(我没有使用任何AsyncTask,我已经找了CommonsWare代码wakefullIntent但我不理解它).

这是NotificationsService.java的代码

public class NotificationsService extends IntentService {
private static  int TIME_INTERVAL_MILIS=90000;
private static final int REFRESH=10;
private  NotificationManager noteManager;
private static List<FlightStatusNote> …
Run Code Online (Sandbox Code Playgroud)

android

25
推荐指数
3
解决办法
4万
查看次数

什么是相同的setDisplayOrientation()的Camera2 API?

使用android.hardware.Camera,为了使摄像机输出适当地跟踪设备运动,我们需要连接OrientationEventListenersetDisplayOrientation()方法Camera.这样,当用户扭转设备时,我们可以保持相机预览中的"向上"与现实世界中的"向上"同步.对于围绕Y轴旋转设备(即,从横向翻转到反向横向或向后),尤其如此.

对于大多数方向更改,android.hardware.camera2API似乎"正常工作".但是,对于Y轴旋转(横向 - >反向横向或反向横向),相机预览会被反转.

什么是调用相当于setDisplayOrientation()Camera了Camera2 API,所以我们可以处理这种情况?

android android-camera

25
推荐指数
1
解决办法
1万
查看次数

我们何时需要使用Android提供我们自己的随机初始化向量(IV)?

有许多已发布的报告,在旧版本的Android上,我们需要提供我们自己SecureRandom的初始化向量(IV),因为默认值不是随机的:

相反,随着API等级23,如果你尝试提供你自己的IV,你还必须调用setRandomizedEncryptionRequired(false)KeyGenParameterSpec.Builder,否则你会得到异常的"加密时,调用者提供IV不允许".

据推测,在线路的某个地方,Android在IV生成方面从"可怕"变为"足够好".

什么是截止值,低于该截止值我们应该生成自己的IV而不是使用Android生成的IV?

security android

23
推荐指数
1
解决办法
440
查看次数

任何人都有MediaRecorder使用ParcelFileDescriptor和createPipe()?

我试图找出一个录制音频的例子,数据存储由应用程序处理,而不是MediaRecorder.用例包括将记录存储在内部存储器或加密记录.

原则上,这应该使用createPipe()on 创建的管道ParcelFileDescriptor,但我得到输出格式错误.

首先,这是一个示例项目,使用"自然"记录MediaRecorder,MediaRecorder直接写入外部存储上的输出文件.这个应用程序工作得很好,输出可以由记录它的Android设备或我的Linux机器上的VLC播放.

这是我createPipe()对这个项目的变化.从一般MediaRecorder配置(例如setOutputFormat())的角度来看,它与第一个相同,因此代码可能是正确的.

但是,我通过以下方式提供输出:

  recorder.setOutputFile(getStreamFd());
Run Code Online (Sandbox Code Playgroud)

getStreamFd()使用的地方createPipe(),产生一个后台线程来从管道中读取,并返回写入结束以供以下用户使用MediaRecorder:

  private FileDescriptor getStreamFd() {
    ParcelFileDescriptor[] pipe=null;

    try {
      pipe=ParcelFileDescriptor.createPipe();

      new TransferThread(new AutoCloseInputStream(pipe[0]),
                       new FileOutputStream(getOutputFile())).start();
    }
    catch (IOException e) {
      Log.e(getClass().getSimpleName(), "Exception opening pipe", e);
    }

    return(pipe[1].getFileDescriptor());
  }
Run Code Online (Sandbox Code Playgroud)

TransferThread是一个经典的java.io流到流复制例程,增加了智能来刷​​新和同步输出文件:

  static class TransferThread extends Thread {
    InputStream in;
    FileOutputStream out;

    TransferThread(InputStream in, FileOutputStream out) {
      this.in=in; …
Run Code Online (Sandbox Code Playgroud)

android android-mediarecorder

22
推荐指数
1
解决办法
5725
查看次数

无法在新的Android Studio中找到UI设计器

我已经下载了最近发布的新的android工作室.我无法找到xml的UI设计预览,就像在eclipse中一样.对此有何帮助或建议?

java android intellij-idea android-studio

21
推荐指数
1
解决办法
4万
查看次数

我们如何使用Android N网络安全配置获得自签名证书?

我试图测试N Developer Preview的网络安全配置功能的所有方面.我有大部分工作,但我被自签名证书场景困扰.

根据文档,Android N应该对PEM或DER文件感到满意,因为它适用于其他证书验证方案.但是,我不使用自签名证书,并且我尝试使用此工作继续运行到证书路径验证异常中.

为了测试,我thin用作服务器,在我的开发机器上运行,可以通过N模拟器访问.自签名证书适用于我的开发机器上的浏览器,如果我切换到运行thinsans SSL,应用程序可以很好地到达服务器.所以,这不是连接问题.

我使用本网站上的说明创建了自签名证书:

sudo openssl genrsa -out "/etc/[webserver]/ssl/example.key" 2048
sudo openssl req -new -key "/etc/[webserver]/ssl/example.key" \
                 -out "/etc/[webserver]/ssl/example.csr"
sudo openssl x509 -req -days 365 -in "/etc/[webserver]/ssl/example.csr" \
                  -signkey "/etc/[webserver]/ssl/example.key"  \
                  -out "/etc/[webserver]/ssl/example.crt"
Run Code Online (Sandbox Code Playgroud)

根据此Stack Overflow回答,该example.crt文件是PEM文件.在其他地方,我看到了创建"组合PEM"文件的说明.但是,我尝试了这两个,没有运气.

在网络安全配置方面的东西,我曾经尝试都<domain-config><debug-overrides>.后者看起来像:

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>
  <debug-overrides>
    <trust-anchors>
      <certificates src="@raw/selfsigned"/>
    </trust-anchors>
  </debug-overrides>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

但是,在任何一种情况下我都会得到验证错误.

作为原始资源,我们究竟应该将PEM或DER文件作为原始资源投入使用?

ssl android android-7.0-nougat

20
推荐指数
1
解决办法
2074
查看次数