该代码对于低于API28的设备运行正常,对于高于或Api28的设备运行失败。调试器不会显示引发错误的代码部分。
引发错误的部分是在意图访问Web浏览器和视频播放器的过程中。
我已经尝试使用API28以下的所有android设备,并且代码运行正常。
hRecycler.read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(context,url,Toast.LENGTH_SHORT).show();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
context.startActivity(i);
}
});
@Override
public void onSuccess(VimeoVideo video) {
String streamlink = (String)video.getStreams().values().toArray()[0];
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(streamlink);
intent.setDataAndType(data, "video/mp4");
context.startActivity(intent);
}
@Override
public void onFailure(Throwable throwable) {
Toast.makeText(context,"Problem withlink",Toast.LENGTH_SHORT).show();
}
RemoteException occurs on reporting focusChanged, w=Window{bd21bfc u0 com.example.android.play_api/com.example.android.play_api.TestimonyActivity EXITING} android.os.DeadObjectException
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:1143)
at android.view.IWindow$Stub$Proxy.windowFocusChanged(IWindow.java:500)
at com.android.server.wm.WindowState.reportFocusChangedSerialized(WindowState.java:3903)
at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:5426)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:65)
at com.android.server.ServiceThread.run(ServiceThread.java:44)
该过程已死,因为在将onClickListener传递到列表适配器的过程中,两个onClickListener都使用了模糊的上下文来启动活动,而在使用getApplicationContext()将上下文传递到适配器的过程中。
此问题它无法承载进程并杀死导致崩溃或DeadObjectException的活动。
行中的问题:
context.startActivity(intent); context.startActivity(i);
和上下文作为getApplicationContext()给出
解决方案:
将getApplicationContext()更改为SomeActivity.this
并且可能是API28有自己的新规则,因此,这会在具有API28或更高版本的设备中引起问题。
希望这对其他人有帮助。