我正在建立一个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
更新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) 我试图改变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) 我最近从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) 我试图计算两次之间的持续时间差。我从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) 我正在开发一个应用程序,用户可以在其中录制音频,如果 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) 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我不知道我需要添加什么权限.
我正在尝试调试使用 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 文件路径?
我正在尝试构建 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) 我正在尝试学习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) android ×6
ios ×2
objective-c ×2
pjsip ×2
android-connectivitymanager ×1
android-ndk ×1
android-wifi ×1
build.gradle ×1
crashlytics ×1
firebase ×1
gradle ×1
iphone ×1
java ×1
json ×1
makefile ×1
mobile-data ×1
networking ×1
pjsua2 ×1
ubuntu-18.04 ×1
xcode ×1