Java 颤振:如何将本机SDK(Spotify Android SDK)添加到应用程序?
我想写一个访问Spotify Android SDK的包。我正在尝试添加身份验证。那不行。我没有打开登录屏幕。我是否需要在dart代码中添加视图(如下所述:) 省道:Java 颤振:如何将本机SDK(Spotify Android SDK)添加到应用程序?,java,android,flutter,spotify,Java,Android,Flutter,Spotify,我想写一个访问Spotify Android SDK的包。我正在尝试添加身份验证。那不行。我没有打开登录屏幕。我是否需要在dart代码中添加视图(如下所述:) 省道: ... void initPlatformState() async { try { String test = await Nativecode05.spotifyTest; print(test); } on PlatformException { platformVersi
...
void initPlatformState() async {
try {
String test = await Nativecode05.spotifyTest;
print(test);
} on PlatformException {
platformVersion = 'Failed';
}
}
...
import 'dart:async';
import 'package:flutter/services.dart';
class Nativecode05 {
static const MethodChannel _channel = const MethodChannel('nativecode05');
static Future<String> get spotifyTest async {
final String version = await _channel.invokeMethod('spotifyTest');
return version;
}
}
package example.com.nativecode05;
import io.flutter.Log;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import com.spotify.android.appremote.api.ConnectionParams;
import com.spotify.android.appremote.api.Connector;
import com.spotify.android.appremote.api.SpotifyAppRemote;
import static android.content.ContentValues.TAG;
/** Nativecode05Plugin */
public class Nativecode05Plugin implements MethodCallHandler {
private static final String CLIENT_ID = "7b23dface41e4a9595276a7c12262143";
private static final String REDIRECT_URI = "http://cape/callback";
private SpotifyAppRemote mSpotifyAppRemote;
private Registrar mRegistrar;
/** Plugin registration. */
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "nativecode05");
channel.setMethodCallHandler(new Nativecode05Plugin(registrar));
}
Nativecode05Plugin(Registrar registrar) {
mRegistrar = registrar;
}
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("spotifyTest")) {
result.success("test");
performAuthorization();
return;
}
result.notImplemented();
}
private void performAuthorization() {
Log.d(TAG, "Performing authorization...");
// Set the connection parameters
ConnectionParams connectionParams =
new ConnectionParams.Builder(CLIENT_ID)
.setRedirectUri(REDIRECT_URI)
.showAuthView(true)
.build();
SpotifyAppRemote.connect(mRegistrar.activeContext(), connectionParams,
new Connector.ConnectionListener() {
@Override
public void onConnected(SpotifyAppRemote spotifyAppRemote) {
mSpotifyAppRemote = spotifyAppRemote;
Log.d(TAG, "Connected! Yay!");
// Now you can start interacting with App Remote
//connected();
}
@Override
public void onFailure(Throwable throwable) {
Log.e(TAG, throwable.getMessage(), throwable);
// Something went wrong when attempting to connect! Handle errors here
}
});
}
}
Launching lib\main.dart on SM G960F in debug mode...
Initializing gradle...
Resolving dependencies...
Running Gradle task 'assembleDebug'...
Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
D/EmergencyMode(17067): [EmergencyManager] android createPackageContext successful
D/InputTransport(17067): Input channel constructed: fd=87
D/ViewRootImpl@a7a19f9[MainActivity](17067): setView = DecorView@97d1d3e[MainActivity] TM=true MM=false
W/ecode05_exampl(17067): Accessing hidden method Landroid/view/accessibility/AccessibilityNodeInfo;->getSourceNodeId()J (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden method Landroid/view/accessibility/AccessibilityRecord;->getSourceNodeId()J (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden field Landroid/view/accessibility/AccessibilityNodeInfo;->mChildNodeIds:Landroid/util/LongArray; (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden method Landroid/util/LongArray;->get(I)J (light greylist, reflection)
D/SurfaceView(17067): onWindowVisibilityChanged(0) true 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
D/ViewRootImpl@a7a19f9[MainActivity](17067): dispatchAttachedToWindow
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x7 surface={valid=true 508548042752} changed=true
I/OpenGLRenderer(17067): Initialized EGL, version 1.4
D/OpenGLRenderer(17067): Swap behavior 2
D/mali_winsys(17067): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer(17067): eglCreateWindowSurface = 0x765347ca00, 0x7667d35010
D/SurfaceView(17067): show() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
Syncing files to device SM G960F...
D/SurfaceView(17067): surfaceCreated 1 #8 io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
D/mali_winsys(17067): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/SurfaceView(17067): surfaceChanged (1440,2900) 1 #8 io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
I/Choreographer(17067): Skipped 39 frames! The application may be doing too much work on its main thread.
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x3 surface={valid=true 508548042752} changed=false
I/OpenGLRenderer(17067): Davey! duration=814ms; Flags=1, IntendedVsync=626714985015335, Vsync=626715635015309, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=626715637655313, AnimationStart=626715637750275, PerformTraversalsStart=626715637758236, DrawStart=626715651163506, SyncQueued=626715655711967, SyncStart=626715655915390, IssueDrawCommandsStart=626715656392275, SwapBuffers=626715796396544, FrameCompleted=626715799700313, DequeueBufferDuration=11272000, QueueBufferDuration=584000,
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
I/InputMethodManager(17067): startInputInner - mService.startInputOrWindowGainedFocus
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_RESIZED_REPORT: frame=Rect(0, 0 - 1440, 2960) ci=Rect(0, 96 - 0, 60) vi=Rect(0, 96 - 0, 60) or=1
D/InputTransport(17067): Input channel constructed: fd=96
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
D/ContentValues(17067): Performing authorization...
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 2 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 9 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 1 line
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 5 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 5 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
E/ContentValues(17067): {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): com.spotify.android.appremote.api.error.AuthenticationFailedException: {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector.asAppRemoteException(LocalConnector.java:131)
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector.access$000(LocalConnector.java:35)
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector$1.onConnectionFailed(LocalConnector.java:111)
E/ContentValues(17067): at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:142)
E/ContentValues(17067): at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:75)
E/ContentValues(17067): at android.os.AsyncTask.finish(AsyncTask.java:695)
E/ContentValues(17067): at android.os.AsyncTask.access$600(AsyncTask.java:180)
E/ContentValues(17067): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
E/ContentValues(17067): at android.os.Handler.dispatchMessage(Handler.java:106)
E/ContentValues(17067): at android.os.Looper.loop(Looper.java:214)
E/ContentValues(17067): at android.app.ActivityThread.main(ActivityThread.java:6986)
E/ContentValues(17067): at java.lang.reflect.Method.invoke(Native Method)
E/ContentValues(17067): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/ContentValues(17067): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
E/ContentValues(17067): Caused by: com.spotify.protocol.client.error.RemoteClientException: {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient.getRemoteClientException(RemoteWampClient.java:139)
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient.access$200(RemoteWampClient.java:16)
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient$1.onAbort(RemoteWampClient.java:44)
E/ContentValues(17067): at com.spotify.protocol.client.WampRouterImpl.routeAbort(WampRouterImpl.java:100)
E/ContentValues(17067): at com.spotify.protocol.client.WampRouterImpl.route(WampRouterImpl.java:26)
E/ContentValues(17067): at com.spotify.protocol.client.AppProtocolCommunicator.onData(AppProtocolCommunicator.java:78)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo.handleMessage(RemoteServiceIo.java:113)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo.access$000(RemoteServiceIo.java:47)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo$IncomingHandler.handleMessage(RemoteServiceIo.java:91)
E/ContentValues(17067): ... 6 more
I/flutter (17067): test
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
I/InputMethodManager(17067): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(17067): Input channel constructed: fd=97
D/InputTransport(17067): Input channel destroyed: fd=96
D/SurfaceView(17067): windowStopped(true) false 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
D/SurfaceView(17067): show() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
D/SurfaceView(17067): surfaceDestroyed callback.size 1 #1 io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
W/libEGL (17067): EGLNativeWindowType 0x7667d36010 disconnect failed
D/SurfaceView(17067): destroy() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
D/SurfaceView(17067): onWindowVisibilityChanged(8) false 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
W/libEGL (17067): EGLNativeWindowType 0x7667d35010 disconnect failed
D/OpenGLRenderer(17067): eglDestroySurface = 0x765347ca00, 0x7667d35000
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x5 surface={valid=false 0} changed=true
套餐:
...
void initPlatformState() async {
try {
String test = await Nativecode05.spotifyTest;
print(test);
} on PlatformException {
platformVersion = 'Failed';
}
}
...
import 'dart:async';
import 'package:flutter/services.dart';
class Nativecode05 {
static const MethodChannel _channel = const MethodChannel('nativecode05');
static Future<String> get spotifyTest async {
final String version = await _channel.invokeMethod('spotifyTest');
return version;
}
}
package example.com.nativecode05;
import io.flutter.Log;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import com.spotify.android.appremote.api.ConnectionParams;
import com.spotify.android.appremote.api.Connector;
import com.spotify.android.appremote.api.SpotifyAppRemote;
import static android.content.ContentValues.TAG;
/** Nativecode05Plugin */
public class Nativecode05Plugin implements MethodCallHandler {
private static final String CLIENT_ID = "7b23dface41e4a9595276a7c12262143";
private static final String REDIRECT_URI = "http://cape/callback";
private SpotifyAppRemote mSpotifyAppRemote;
private Registrar mRegistrar;
/** Plugin registration. */
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "nativecode05");
channel.setMethodCallHandler(new Nativecode05Plugin(registrar));
}
Nativecode05Plugin(Registrar registrar) {
mRegistrar = registrar;
}
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("spotifyTest")) {
result.success("test");
performAuthorization();
return;
}
result.notImplemented();
}
private void performAuthorization() {
Log.d(TAG, "Performing authorization...");
// Set the connection parameters
ConnectionParams connectionParams =
new ConnectionParams.Builder(CLIENT_ID)
.setRedirectUri(REDIRECT_URI)
.showAuthView(true)
.build();
SpotifyAppRemote.connect(mRegistrar.activeContext(), connectionParams,
new Connector.ConnectionListener() {
@Override
public void onConnected(SpotifyAppRemote spotifyAppRemote) {
mSpotifyAppRemote = spotifyAppRemote;
Log.d(TAG, "Connected! Yay!");
// Now you can start interacting with App Remote
//connected();
}
@Override
public void onFailure(Throwable throwable) {
Log.e(TAG, throwable.getMessage(), throwable);
// Something went wrong when attempting to connect! Handle errors here
}
});
}
}
Launching lib\main.dart on SM G960F in debug mode...
Initializing gradle...
Resolving dependencies...
Running Gradle task 'assembleDebug'...
Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
D/EmergencyMode(17067): [EmergencyManager] android createPackageContext successful
D/InputTransport(17067): Input channel constructed: fd=87
D/ViewRootImpl@a7a19f9[MainActivity](17067): setView = DecorView@97d1d3e[MainActivity] TM=true MM=false
W/ecode05_exampl(17067): Accessing hidden method Landroid/view/accessibility/AccessibilityNodeInfo;->getSourceNodeId()J (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden method Landroid/view/accessibility/AccessibilityRecord;->getSourceNodeId()J (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden field Landroid/view/accessibility/AccessibilityNodeInfo;->mChildNodeIds:Landroid/util/LongArray; (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden method Landroid/util/LongArray;->get(I)J (light greylist, reflection)
D/SurfaceView(17067): onWindowVisibilityChanged(0) true 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
D/ViewRootImpl@a7a19f9[MainActivity](17067): dispatchAttachedToWindow
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x7 surface={valid=true 508548042752} changed=true
I/OpenGLRenderer(17067): Initialized EGL, version 1.4
D/OpenGLRenderer(17067): Swap behavior 2
D/mali_winsys(17067): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer(17067): eglCreateWindowSurface = 0x765347ca00, 0x7667d35010
D/SurfaceView(17067): show() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
Syncing files to device SM G960F...
D/SurfaceView(17067): surfaceCreated 1 #8 io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
D/mali_winsys(17067): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/SurfaceView(17067): surfaceChanged (1440,2900) 1 #8 io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
I/Choreographer(17067): Skipped 39 frames! The application may be doing too much work on its main thread.
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x3 surface={valid=true 508548042752} changed=false
I/OpenGLRenderer(17067): Davey! duration=814ms; Flags=1, IntendedVsync=626714985015335, Vsync=626715635015309, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=626715637655313, AnimationStart=626715637750275, PerformTraversalsStart=626715637758236, DrawStart=626715651163506, SyncQueued=626715655711967, SyncStart=626715655915390, IssueDrawCommandsStart=626715656392275, SwapBuffers=626715796396544, FrameCompleted=626715799700313, DequeueBufferDuration=11272000, QueueBufferDuration=584000,
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
I/InputMethodManager(17067): startInputInner - mService.startInputOrWindowGainedFocus
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_RESIZED_REPORT: frame=Rect(0, 0 - 1440, 2960) ci=Rect(0, 96 - 0, 60) vi=Rect(0, 96 - 0, 60) or=1
D/InputTransport(17067): Input channel constructed: fd=96
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
D/ContentValues(17067): Performing authorization...
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 2 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 9 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 1 line
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 5 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 5 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
E/ContentValues(17067): {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): com.spotify.android.appremote.api.error.AuthenticationFailedException: {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector.asAppRemoteException(LocalConnector.java:131)
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector.access$000(LocalConnector.java:35)
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector$1.onConnectionFailed(LocalConnector.java:111)
E/ContentValues(17067): at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:142)
E/ContentValues(17067): at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:75)
E/ContentValues(17067): at android.os.AsyncTask.finish(AsyncTask.java:695)
E/ContentValues(17067): at android.os.AsyncTask.access$600(AsyncTask.java:180)
E/ContentValues(17067): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
E/ContentValues(17067): at android.os.Handler.dispatchMessage(Handler.java:106)
E/ContentValues(17067): at android.os.Looper.loop(Looper.java:214)
E/ContentValues(17067): at android.app.ActivityThread.main(ActivityThread.java:6986)
E/ContentValues(17067): at java.lang.reflect.Method.invoke(Native Method)
E/ContentValues(17067): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/ContentValues(17067): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
E/ContentValues(17067): Caused by: com.spotify.protocol.client.error.RemoteClientException: {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient.getRemoteClientException(RemoteWampClient.java:139)
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient.access$200(RemoteWampClient.java:16)
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient$1.onAbort(RemoteWampClient.java:44)
E/ContentValues(17067): at com.spotify.protocol.client.WampRouterImpl.routeAbort(WampRouterImpl.java:100)
E/ContentValues(17067): at com.spotify.protocol.client.WampRouterImpl.route(WampRouterImpl.java:26)
E/ContentValues(17067): at com.spotify.protocol.client.AppProtocolCommunicator.onData(AppProtocolCommunicator.java:78)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo.handleMessage(RemoteServiceIo.java:113)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo.access$000(RemoteServiceIo.java:47)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo$IncomingHandler.handleMessage(RemoteServiceIo.java:91)
E/ContentValues(17067): ... 6 more
I/flutter (17067): test
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
I/InputMethodManager(17067): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(17067): Input channel constructed: fd=97
D/InputTransport(17067): Input channel destroyed: fd=96
D/SurfaceView(17067): windowStopped(true) false 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
D/SurfaceView(17067): show() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
D/SurfaceView(17067): surfaceDestroyed callback.size 1 #1 io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
W/libEGL (17067): EGLNativeWindowType 0x7667d36010 disconnect failed
D/SurfaceView(17067): destroy() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
D/SurfaceView(17067): onWindowVisibilityChanged(8) false 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
W/libEGL (17067): EGLNativeWindowType 0x7667d35010 disconnect failed
D/OpenGLRenderer(17067): eglDestroySurface = 0x765347ca00, 0x7667d35000
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x5 surface={valid=false 0} changed=true
结果为终端:
...
void initPlatformState() async {
try {
String test = await Nativecode05.spotifyTest;
print(test);
} on PlatformException {
platformVersion = 'Failed';
}
}
...
import 'dart:async';
import 'package:flutter/services.dart';
class Nativecode05 {
static const MethodChannel _channel = const MethodChannel('nativecode05');
static Future<String> get spotifyTest async {
final String version = await _channel.invokeMethod('spotifyTest');
return version;
}
}
package example.com.nativecode05;
import io.flutter.Log;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import com.spotify.android.appremote.api.ConnectionParams;
import com.spotify.android.appremote.api.Connector;
import com.spotify.android.appremote.api.SpotifyAppRemote;
import static android.content.ContentValues.TAG;
/** Nativecode05Plugin */
public class Nativecode05Plugin implements MethodCallHandler {
private static final String CLIENT_ID = "7b23dface41e4a9595276a7c12262143";
private static final String REDIRECT_URI = "http://cape/callback";
private SpotifyAppRemote mSpotifyAppRemote;
private Registrar mRegistrar;
/** Plugin registration. */
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "nativecode05");
channel.setMethodCallHandler(new Nativecode05Plugin(registrar));
}
Nativecode05Plugin(Registrar registrar) {
mRegistrar = registrar;
}
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("spotifyTest")) {
result.success("test");
performAuthorization();
return;
}
result.notImplemented();
}
private void performAuthorization() {
Log.d(TAG, "Performing authorization...");
// Set the connection parameters
ConnectionParams connectionParams =
new ConnectionParams.Builder(CLIENT_ID)
.setRedirectUri(REDIRECT_URI)
.showAuthView(true)
.build();
SpotifyAppRemote.connect(mRegistrar.activeContext(), connectionParams,
new Connector.ConnectionListener() {
@Override
public void onConnected(SpotifyAppRemote spotifyAppRemote) {
mSpotifyAppRemote = spotifyAppRemote;
Log.d(TAG, "Connected! Yay!");
// Now you can start interacting with App Remote
//connected();
}
@Override
public void onFailure(Throwable throwable) {
Log.e(TAG, throwable.getMessage(), throwable);
// Something went wrong when attempting to connect! Handle errors here
}
});
}
}
Launching lib\main.dart on SM G960F in debug mode...
Initializing gradle...
Resolving dependencies...
Running Gradle task 'assembleDebug'...
Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
D/EmergencyMode(17067): [EmergencyManager] android createPackageContext successful
D/InputTransport(17067): Input channel constructed: fd=87
D/ViewRootImpl@a7a19f9[MainActivity](17067): setView = DecorView@97d1d3e[MainActivity] TM=true MM=false
W/ecode05_exampl(17067): Accessing hidden method Landroid/view/accessibility/AccessibilityNodeInfo;->getSourceNodeId()J (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden method Landroid/view/accessibility/AccessibilityRecord;->getSourceNodeId()J (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden field Landroid/view/accessibility/AccessibilityNodeInfo;->mChildNodeIds:Landroid/util/LongArray; (light greylist, reflection)
W/ecode05_exampl(17067): Accessing hidden method Landroid/util/LongArray;->get(I)J (light greylist, reflection)
D/SurfaceView(17067): onWindowVisibilityChanged(0) true 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
D/ViewRootImpl@a7a19f9[MainActivity](17067): dispatchAttachedToWindow
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x7 surface={valid=true 508548042752} changed=true
I/OpenGLRenderer(17067): Initialized EGL, version 1.4
D/OpenGLRenderer(17067): Swap behavior 2
D/mali_winsys(17067): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer(17067): eglCreateWindowSurface = 0x765347ca00, 0x7667d35010
D/SurfaceView(17067): show() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
Syncing files to device SM G960F...
D/SurfaceView(17067): surfaceCreated 1 #8 io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
D/mali_winsys(17067): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/SurfaceView(17067): surfaceChanged (1440,2900) 1 #8 io.flutter.view.FlutterView{5395cb5 VFED..... ......ID 0,0-1440,2900}
I/Choreographer(17067): Skipped 39 frames! The application may be doing too much work on its main thread.
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x3 surface={valid=true 508548042752} changed=false
I/OpenGLRenderer(17067): Davey! duration=814ms; Flags=1, IntendedVsync=626714985015335, Vsync=626715635015309, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=626715637655313, AnimationStart=626715637750275, PerformTraversalsStart=626715637758236, DrawStart=626715651163506, SyncQueued=626715655711967, SyncStart=626715655915390, IssueDrawCommandsStart=626715656392275, SwapBuffers=626715796396544, FrameCompleted=626715799700313, DequeueBufferDuration=11272000, QueueBufferDuration=584000,
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
I/InputMethodManager(17067): startInputInner - mService.startInputOrWindowGainedFocus
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_RESIZED_REPORT: frame=Rect(0, 0 - 1440, 2960) ci=Rect(0, 96 - 0, 60) vi=Rect(0, 96 - 0, 60) or=1
D/InputTransport(17067): Input channel constructed: fd=96
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
D/ContentValues(17067): Performing authorization...
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 2 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 9 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 1 line
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 5 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 153
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
I/chatty (17067): uid=10433(example.com.nativecode05_example) AsyncTask #2 identical 5 lines
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
W/ecode05_exampl(17067): Unable to resolve Lcom/spotify/protocol/types/Roles; annotation class 156
E/ContentValues(17067): {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): com.spotify.android.appremote.api.error.AuthenticationFailedException: {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector.asAppRemoteException(LocalConnector.java:131)
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector.access$000(LocalConnector.java:35)
E/ContentValues(17067): at com.spotify.android.appremote.api.LocalConnector$1.onConnectionFailed(LocalConnector.java:111)
E/ContentValues(17067): at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:142)
E/ContentValues(17067): at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:75)
E/ContentValues(17067): at android.os.AsyncTask.finish(AsyncTask.java:695)
E/ContentValues(17067): at android.os.AsyncTask.access$600(AsyncTask.java:180)
E/ContentValues(17067): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
E/ContentValues(17067): at android.os.Handler.dispatchMessage(Handler.java:106)
E/ContentValues(17067): at android.os.Looper.loop(Looper.java:214)
E/ContentValues(17067): at android.app.ActivityThread.main(ActivityThread.java:6986)
E/ContentValues(17067): at java.lang.reflect.Method.invoke(Native Method)
E/ContentValues(17067): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/ContentValues(17067): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
E/ContentValues(17067): Caused by: com.spotify.protocol.client.error.RemoteClientException: {"message":"Could not authenticate within 60 s."}
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient.getRemoteClientException(RemoteWampClient.java:139)
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient.access$200(RemoteWampClient.java:16)
E/ContentValues(17067): at com.spotify.protocol.client.RemoteWampClient$1.onAbort(RemoteWampClient.java:44)
E/ContentValues(17067): at com.spotify.protocol.client.WampRouterImpl.routeAbort(WampRouterImpl.java:100)
E/ContentValues(17067): at com.spotify.protocol.client.WampRouterImpl.route(WampRouterImpl.java:26)
E/ContentValues(17067): at com.spotify.protocol.client.AppProtocolCommunicator.onData(AppProtocolCommunicator.java:78)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo.handleMessage(RemoteServiceIo.java:113)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo.access$000(RemoteServiceIo.java:47)
E/ContentValues(17067): at com.spotify.android.appremote.internal.RemoteServiceIo$IncomingHandler.handleMessage(RemoteServiceIo.java:91)
E/ContentValues(17067): ... 6 more
I/flutter (17067): test
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
V/InputMethodManager(17067): Starting input: tba=example.com.nativecode05_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(17067): startInputInner - Id : 0
I/InputMethodManager(17067): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(17067): Input channel constructed: fd=97
D/InputTransport(17067): Input channel destroyed: fd=96
D/SurfaceView(17067): windowStopped(true) false 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
D/SurfaceView(17067): show() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
D/SurfaceView(17067): surfaceDestroyed callback.size 1 #1 io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
W/libEGL (17067): EGLNativeWindowType 0x7667d36010 disconnect failed
D/SurfaceView(17067): destroy() Surface(name=SurfaceView - example.com.nativecode05_example/example.com.nativecode05_example.MainActivity@5395cb5@0[17067])/@0xca9cf4a io.flutter.view.FlutterView{5395cb5 VFED..... ........ 0,0-1440,2900}
D/ViewRootImpl@a7a19f9[MainActivity](17067): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(17067): prepareNavigationBarInfo() DecorView@97d1d3e[MainActivity]
D/InputMethodManager(17067): getNavigationBarColor() -855310
D/SurfaceView(17067): onWindowVisibilityChanged(8) false 5395cb5 of ViewRootImpl@a7a19f9[MainActivity]
W/libEGL (17067): EGLNativeWindowType 0x7667d35010 disconnect failed
D/OpenGLRenderer(17067): eglDestroySurface = 0x765347ca00, 0x7667d35000
D/ViewRootImpl@a7a19f9[MainActivity](17067): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x5 surface={valid=false 0} changed=true
您可以将此代码用于Spotify API。它还可以用于其他API调用。这里使用的是flatter_web_auth 0.1.2包。这更容易
void authenticate() async {
// Present the dialog to the user
final result = await FlutterWebAuth.authenticate(
url:
"https://accounts.spotify.com/authorize?client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&redirect_uri=yourname:/&scope=user-read-currently-playing&response_type=token&state=123",
callbackUrlScheme: "yourname",
);
// Extract token from resulting url
final token = Uri.parse(result);
String at = token.fragment;
at = "http://website/index.html?$at"; // Just for easy persing
var accesstoken = Uri.parse(at).queryParameters['access_token'];
print('token');
print(accesstoken);
}
添加到AndroidManifest.xml android\app\src\main
...
</activity>
<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" >
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="yourname" />
</intent-filter>
</activity>
</application>
</manifest>
。。。
您好,软件包正是您想要的。免责声明我是软件包的开发者:)