在提出问题之前,我找到了一些链接,我逐一检查了这些链接,但没有一个链接给我一个解决方案:
我到目前为止唯一找到的链接是这一个,它提供了两种方法:使用Android Volley发出HTTPS请求
我也找到了这个博客,其中有很多解释,但最后,我意识到这些例子都使用了来自"apache.org"的弃用库,而博客本身也没有Android Volley的内容.
https://nelenkov.blogspot.mx/2011/12/using-custom-certificate-trust-store-on.html
还有来自Android的链接和"未知证书颁发机构"部分的代码,它给出了解决方案的一个好主意,但代码本身在其结构中缺少一些东西(Android Studio抱怨...):https:// developer.android.com/training/articles/security-ssl.html
但是这个链接的引用似乎是解决问题的核心概念.
"TrustManager是系统用于验证来自服务器的证书的方法,并且通过从具有一个或多个CA的KeyStore创建一个证书 - 那些将是该TrustManager信任的唯一CA.给定新的TrustManager,该示例初始化一个新的SSLContext它提供了一个SSLSocketFactory,您可以使用它来覆盖HttpsURLConnection的默认SSLSocketFactory.这样连接将使用您的CA进行证书验证."
现在,这是我的问题:我有一个使用自签名证书的网络服务器,我根据其证书创建了一个"BKS信任库".我已将de BKS信任库导入我的Android APP,现在,我的应用程序上有以下代码(我刚刚在这里发布了MainActivity,这是迄今为止唯一与此主题相关的类,我想):
package com.domain.myapp;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.io.InputStream;
import java.security.KeyStore;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.SSLContext; …Run Code Online (Sandbox Code Playgroud) 有没有人遇到这样的事情?
这是一个场景:我想构建一个单独的类,从中我可以通过静态方法停止并启动警报.从Activity类中,我想调用我计划构建的这个类的方法,但重点是,当我传递"context"时,我甚至计划将Activity上下文传递给静态方法在我的AlarmManager对象中,Android Studio向我传递了以下信息,这些信息打印在上面的屏幕上,我不得不承认,我不能说明这一点.
我错过了什么?我一直在寻找谷歌,但似乎这种情况不是那么常见.
IMPORTAT:关于上面的图片,我试图只使用上下文(下面的代码),而不使用getApplicationContext(),但它没有运行...
这是代码:
package com.mydomain.myapp;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
public class AlarmManager {
private static AlarmManager alarm;
private static PendingIntent pIntent;
//start alarm
public static void setAlarm(Context context, int alarmId, long alarmTime) {
Intent startAlarmIntent;
long beginAt = SystemClock.elapsedRealtime() + 60 * 1000;
long interval = 300000; // 5 minutes
alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
startAlarmIntent = new Intent(context, AlarmBroadcastReceiver.class);
pIntent = PendingIntent.getBroadcast(context, alarmId, startAlarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, beginAt, interval, pIntent); …Run Code Online (Sandbox Code Playgroud)