小编Jee*_*eva的帖子

如何处理wifi和移动数据之间的网络变化?

我正在建立一个VoIP应用程序.当用户在WiFi与移动数据之间切换时,在VoIP呼叫期间,我在处理场景时遇到问题.

在我的通话屏幕活动中,我已注册接收器,这有助于我获得有关网络更改方案的通知.

这是我用于检测onRecieve方法中网络变化的代码.

conn_name是包含先前连接名称的私有类级别变量.

ConnectivityManager connectivity_mgr = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
    NetworkInfo net_info = connectivity_mgr.getActiveNetworkInfo();

    if (net_info != null && net_info.isConnectedOrConnecting() && !conn_name.equalsIgnoreCase("")) {
        new_con = net_info.getExtraInfo();        
        if (new_con != null && !new_con.equalsIgnoreCase(conn_name))
            network_changed = true;
        conn_name = (new_con == null) ? "" : new_con;
        connectionStatus ="connected";        
    } else {
        if (net_info != null && conn_name.equalsIgnoreCase("")){
            conn_name = net_info.getExtraInfo();
            connectionStatus ="connected";
            network_changed = true;
        }else if(!new_con.equals(conn_name)) {    
            conn_name = "";
            connectionStatus ="disconnected";
            network_changed = true;          
        }        
    }
Run Code Online (Sandbox Code Playgroud)



所以使用上面的方法我能够检测网络变化.但是当我与WiFi连接时会发生一件奇怪的事情.
当我的应用程序最初启动时,它与移动数据连接.当用户进入他已知的WiFi区域时,他连接到他已知的WiFi.由于WiFi总是被选为默认路由,因此android会切换到WiFi,我会收到WiFi已经打开的网络通知.所以我将我的应用IP地址更新为WiFi IP地址.这里没有问题.但是移动数据仍然是连接的同时getActiveNetworkInfo() …

networking android android-wifi mobile-data android-connectivitymanager

19
推荐指数
1
解决办法
8383
查看次数

com.android.builder.internal.aapt.v2.Aapt2Exception:更新android studio后Android资源编译失败

更新android studio后,我收到了这个错误.如何解决这个问题?

org.gradle.execution.MultipleBuildFailures: Build completed with 1 failures.
    at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:358)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:219)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:77)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:74)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:154)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:38)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:96)
    at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:74)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:55)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.run(RunAsBuildOperationBuildActionRunner.java:50)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:44)
    at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:79)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:44)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53) …
Run Code Online (Sandbox Code Playgroud)

android build.gradle android-gradle-plugin

10
推荐指数
4
解决办法
5万
查看次数

如何在pjsip android中更改编解码器优先级

我试图改变pjsip android中使用的编解码器的优先级.
我能够获得编解码器的优先级,但在更改编解码器优先级后,它没有反映出来.

if( ep != null)
        {
            try {
                CodecInfoVector codecInfoVector = ep.codecEnum();
                if(!codecInfoVector.isEmpty()){
                    System.out.println("Codecs Enabled!!");
                    System.out.println("Number of codecs enabled now: "+codecInfoVector.size());
                    for(int i=0;i<codecInfoVector.size();i++)
                    {
                        CodecInfo codecInfo = codecInfoVector.get(i);
                        String codecId = codecInfo.getCodecId();
                        short codecPriority = 128;//use higher number for making preferred codec first.
                        short disableCodecPriority = 0;//use 0 to disable codec in sdp
                        System.out.println("Codec info now is: "+ codecId);
                        switch(codecId)
                        {
                            case "PCMA/8000/1":
                                if(Dialer_Properties.enablePCMA)
                                    codecInfo.codecSetPriority("PCMA/8000",codecPriority);
                                else
                                    codecInfo.codecSetPriority("PCMA/8000",disableCodecPriority);
                                break;
                            case "PCMU/8000/1":
                                if(Dialer_Properties.enablePCMU)
                                    codecInfo.codecSetPriority("PCMU/8000",codecPriority);
                                else
                                    codecInfo.codecSetPriority("PCMU/8000",disableCodecPriority);
                                break;
                            case "G729/8000/1":
                                if(Dialer_Properties.enableG729) …
Run Code Online (Sandbox Code Playgroud)

android pjsip pjsua2

6
推荐指数
1
解决办法
399
查看次数

CrashlyticsCore:发送报告com.crashlytics.android.core.SessionReport @时发生错误

我最近从Firebase迁移到了crashlytics。
我可以通过创建虚拟崩溃来对其进行测试,并将其放入崩溃报告控制台。
但目前,我在运行应用程序时收到此异常。

io.fabric.sdk.android.services.network.HttpRequest$HttpRequestException: java.io.IOException: Hostname 'reports.crashlytics.com' was not verified
        at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2546)
        at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2526)
        at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2512)
        at com.crashlytics.android.core.DefaultCreateReportSpiCall.applyMultipartDataTo(DefaultCreateReportSpiCall.java:89)
        at com.crashlytics.android.core.DefaultCreateReportSpiCall.invoke(DefaultCreateReportSpiCall.java:61)
        at com.crashlytics.android.core.CompositeCreateReportSpiCall.invoke(CompositeCreateReportSpiCall.java:18)
        at com.crashlytics.android.core.ReportUploader.forceUpload(ReportUploader.java:104)
        at com.crashlytics.android.core.ReportUploader$Worker.attemptUploadWithRetry(ReportUploader.java:242)
        at com.crashlytics.android.core.ReportUploader$Worker.onRun(ReportUploader.java:185)
        at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
        at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)



它表明这是由

Caused by: java.io.IOException: Hostname 'reports.crashlytics.com' was not verified
        at com.android.okhttp.Connection.upgradeToTls(Connection.java:205)
        at com.android.okhttp.Connection.connect(Connection.java:155)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:217)
        at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
        at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25)
        at io.fabric.sdk.android.services.network.HttpRequest.openOutput(HttpRequest.java:2450)
        at io.fabric.sdk.android.services.network.HttpRequest.startPart(HttpRequest.java:2463)
        at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2542)
        at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2526) 
        at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2512) 
        at com.crashlytics.android.core.DefaultCreateReportSpiCall.applyMultipartDataTo(DefaultCreateReportSpiCall.java:89) 
        at com.crashlytics.android.core.DefaultCreateReportSpiCall.invoke(DefaultCreateReportSpiCall.java:61) 
        at com.crashlytics.android.core.CompositeCreateReportSpiCall.invoke(CompositeCreateReportSpiCall.java:18) 
        at com.crashlytics.android.core.ReportUploader.forceUpload(ReportUploader.java:104) 
        at com.crashlytics.android.core.ReportUploader$Worker.attemptUploadWithRetry(ReportUploader.java:242) 
        at …
Run Code Online (Sandbox Code Playgroud)

android firebase crashlytics firebase-crash-reporting

6
推荐指数
1
解决办法
1138
查看次数

__NSCFString timeIntervalSinceReferenceDate]:无法识别的选择器已发送到实例

我试图计算两次之间的持续时间差。我从JSONArray获得持续时间,我使用下面的代码

NSDate *starttime = [[NSDate alloc]init];
NSDate *endtime = [[NSDate alloc]init];
starttime = [currentRecord valueForKey:@"starttime"];
endtime = [currentRecord valueForKey:@"endtime"];
Run Code Online (Sandbox Code Playgroud)

我将上述值传递给另一种方法

+(NSString*)remaningTime:(NSDate*)startDate endDate:(NSDate*)endDate
{
 NSDateComponents *components= [[NSDateComponents alloc]init];
 NSString *durationString;

 components = [[NSCalendar currentCalendar] components:       NSCalendarUnitDay/*|NSCalendarUnitHour|NSCalendarUnitMinute*/ fromDate: endDate toDate: startDate options: 0];
}
Run Code Online (Sandbox Code Playgroud)

但我低于例外

-[__ NSCFString timeIntervalSinceReferenceDate]:无法识别的选择器已发送到实例0x78685f80

2016-12-20 15:21:37.361 nexge[1515:183039] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString timeIntervalSinceReferenceDate]: unrecognized selector sent to instance 0x78685f80'
*** First throw call stack:
(
    0   CoreFoundation                      0x03abc212 __exceptionPreprocess + 194
    1   libobjc.A.dylib …
Run Code Online (Sandbox Code Playgroud)

json objective-c nsdateformatter ios unrecognized-selector

5
推荐指数
1
解决办法
3053
查看次数

当媒体录制暂停时,媒体播放器不播放录制内容

我正在开发一个应用程序,用户可以在其中录制音频,如果 api 级别高于 23,则暂停它。并且用户可以收听暂停的录音。
但我发现,用户无法收听暂停的音频。但我想要的是用户可以收听暂停的音频

当录音停止时,它可以播放,因为它存储在本地路径中。
我还检查了 android 文档和许多关于堆栈溢出的答案,例如如何播放暂停的音频,但我找不到任何特定的链接。

我在这里分享我的问题。如果您有任何解决方案或找到任何链接如何解决我的问题,我们将不胜感激。

即使我需要分享我的代码,也请告诉我。因为我认为没有必要共享代码。因为当用户停止录音时,它应该可以播放。

下面是我的代码

public class AudioRecordingActivity extends BaseActivity
    implements AppDialog.IYesListener,
    AppDialog.IDiscardRecordingListener, AppDialog.ICancelRecordingListener,
    PlayAudioManager.IVoiceCompleteListener,
    MediaRecorder.OnInfoListener {

private static final Logger LOGGER = LoggerFactory.createLogger(AudioRecordingActivity.class);
private TaskDetailsViewModel mViewModel;
private ActivityAudioRecordingBinding mBinding;
private AssignmentIdsModel mAssignmentIdModel;
private long mStartTime = 0;
private long mPauseTime=0;
private MediaRecorder mRecorder;
private File mOutputFile;
public final ObservableField<Integer> mAudioState = new ObservableField<>(0);
private String mAudioPath;
private int mMaxAudioTime;
private int[] amplitudes = new int[100];
private int i = 0;
private Handler …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer android-mediarecorder

5
推荐指数
1
解决办法
326
查看次数

在iPhone上运行时,应用程序崩溃,例外情况

    Thread 1 Crashed:
0   libsystem_kernel.dylib          0x1e81a458 __abort_with_payload + 24
1  libsystem_kernel.dylib           0x1e817dd9    system_set_sfi_window + 1
2   TCC                             0x20f27c4f __CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 229
3   TCC                             0x20f27b6b __CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 1
4   TCC                             0x20f2a383 __tccd_send_block_invoke + 339
5   libxpc.dylib                    0x1e90215f _xpc_connection_reply_callout + 47
6   libxpc.dylib                    0x1e902101 _xpc_connection_call_reply + 27
7   libdispatch.dylib               0x1e72649b _dispatch_queue_override_invoke + 605
8   libdispatch.dylib               0x1e727a91 _dispatch_root_queue_drain + 379
9   libdispatch.dylib               0x1e7278b7 _dispatch_worker_thread3 + 107
10  libsystem_pthread.dylib         0x1e8ce937 _pthread_wqthread + 1169
11  libsystem_pthread.dylib         0x1e8ce48c start_wqthread + 8
Run Code Online (Sandbox Code Playgroud)

异常类型:EXC_CRASH(SIGABRT)异常代码:0x0000000000000000,0x0000000000000000异常注意:EXC_CORPSE_NOTIFY

终止原因:TCC,此应用程序已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据.应用程序的Info.plist必须包含一个NSMicrophoneUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据.由线程触发:1我不知道我需要添加什么权限.

iphone xcode objective-c ios

3
推荐指数
1
解决办法
3000
查看次数

如何在android studio 2.3.3中使用ndk-stack

我正在尝试调试使用 androidNDK 的 Android 应用程序。我没有使用android studio的默认androidNDK。我已经单独下载了androidNDK。使用这个androidNDK我构建了SO文件。现在要调试堆栈中的崩溃,我点击了此链接 https://developer.android.com/ndk/guides/ndk-stack.html

为了进行堆栈跟踪,他们提到了命令

$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt
Run Code Online (Sandbox Code Playgroud)

我将 $NDK 替换为我下载的 androidNDK 的路径。-sym 文件让我感到困惑什么是符号文件?我应该包含哪个文件路径?c 项目文件路径还是我的 android studio 文件路径?

android android-ndk

3
推荐指数
1
解决办法
3117
查看次数

Make 文件给出 *** 缺少分隔符

我正在尝试构建 pjsip 项目..这是我的 pjsip 项目 make 文件..

 include ../../../build.mak
    include ../../../build/common.mak

    export LIBDIR := ../../lib

    RULES_MAK := $(PJDIR)/build/rules.mak

    #export MYCOMPRESS_LIB := ../../lib/lmycompresslib-$(TARGET_NAME)$(LIBEXT)
    export MYCOMPRESS_LIB := lmycompresslib-$(TARGET_NAME)$(LIBEXT)

    ifeq ($(PJ_SHARED_LIBRARIES),)
    else
    export MYCOMPRESS_SONAME := lmycompresslib.$(SHLIB_SUFFIX)
    export MYCOMPRESS_SHLIB := $(MYCOMPRESS_SONAME).$(PJ_VERSION_MAJOR)
    endif

    ###############################################################################
    # Gather all flags.
    #
    export _CFLAGS  := $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
               $(CFLAGS) $(CC_INC). $(CC_INC)../../mycompresslib/include \
               $(CC_INC)../../../pjlib/include
    export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
               $(HOST_CXXFLAGS) $(CXXFLAGS)
    export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
               $(LDFLAGS)

    export MYCOMPRESS_SRCDIR = ../../mycompresslib/src
    export …
Run Code Online (Sandbox Code Playgroud)

makefile pjsip

2
推荐指数
1
解决办法
1391
查看次数

Gradle 4.10.2 需要 Java 7 或更高版本才能运行。从命令行运行 gradle 时,您当前使用的是 Java 6

我正在尝试学习gradle构建。
我按照此链接安装 gradle,并按照提到的步骤操作。
https://gradle.org/install/#close-notification
成功执行所有步骤后,我无法从命令行运行 gradle。
我正在使用 Ubuntu 系统。

gradle -v

FAILURE: Build failed with an exception.

* What went wrong:
Gradle 4.10.2 requires Java 7 or later to run. You are currently using Java 6.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org
Run Code Online (Sandbox Code Playgroud)

所以来回卸载安装后还是卡在这个位置。

它显示它需要 Java7,我用命令检查了它

java -version
Run Code Online (Sandbox Code Playgroud)

并得到了这个输出。

java version "1.8.0_111" …
Run Code Online (Sandbox Code Playgroud)

java gradle ubuntu-18.04

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