编辑2016年5月8日
我发现我的麻烦在我的应用程序中接收媒体按钮事件的原因.请参阅以下答案.我编辑了这个问题的标题,以便更容易地找到问题.最初的标题是"什么可以阻止Android Lollipop上的媒体按钮".
原始问题,2015年4月:
抓我的头,盯着所有的代码2天无济于事...我的Android应用程序应该对媒体按钮做出反应(例如从耳机,用蓝牙耳机测试),如播放/暂停,接下来,倒带.适用于KitKat及以下版本.我发誓它甚至在棒棒糖上工作,直到几天前.现在什么都没有,没有它听到媒体按钮按下的痕迹.有人会快速建议在哪里寻找麻烦吗?测试了两个Lollipop手机,相同的蓝牙耳机和相同的耳机适用于较低版本的Android.同样的耳机工作正常,在其他应用程序中听到媒体按钮按下.我怎么可能打破???
我现在测试了听新闻媒体按钮的新旧方式.在AndroidManifest.xml中:
<receiver android:name=".MediaButtonIntentReceiver" android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
它表示enabled ="false"的事实是正常的 - 我根据需要启用和禁用接收器,MediaButtonIntentReceiver.java在KitKat上获得正常事件,并在Lollipop上完全沉默.
我接下来切换到最新的appcompat(v22.1)并尝试使用MediaSessionCompat对象和相关代码,如下所示.这在一个小型测试应用程序中运行得很好,只是我写的一个活动 - 得到了我的Logcat消息,确认它听到了Lollipop上按下的媒体键.但是当插入我的应用程序时,再次无法在Lollipop上运行.有没有搞错???
private MediaSessionCompat _mediaSession;
final String MEDIA_SESSION_TAG = "some_tag";
void initMediaSessions(Context context) {
// Start a new MediaSession
if (context == null)
return;
Lt.d("initMediaSession()...");
ComponentName eventReceiver = new ComponentName(context.getPackageName(), MediaButtonIntentReceiver.class.getName());
PendingIntent buttonReceiverIntent = PendingIntent.getBroadcast(
context,
0,
new Intent(Intent.ACTION_MEDIA_BUTTON),
PendingIntent.FLAG_UPDATE_CURRENT
);
// Parameters for new MediaSessionCompat():
// context The context.
// tag A short name for debugging purposes. …
Run Code Online (Sandbox Code Playgroud) 我正在学习Dart和Flutter并在Android Studio 3.1.2下开发一个小型Android Flutter应用程序.突然调试器断点停止工作 - 在调试模式下启动的应用程序永远不会在它们上停止,并且指示断点的红点变为红色点,其中x为内部.我的应用程序中唯一仍然可以工作的地方是main.dart模块.
我多次清理项目,在两个不同的设备上测试,完全卸载我的Flutter调试应用程序并开始新的 - 没有任何帮助.关于beta(当前beta 2)频道的颤动更新什么都不做.还尝试切换到开发和主通道 - 没有帮助.
有没有人遇到类似的情况,怎么处理呢?
编辑,添加flutter doctor的mail.dart和输出(当前在master分支上,但在切换到beta或dev分支后有相同的问题):
从main.dart导入,或更好的main.dart:
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'app_strings.dart';
import 'net_libs_page/net_libs_page.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
// ... app-specific localization delegate[s] here
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
//FallbackMaterialLocalisationsDelegate(),
],
supportedLocales: [
Locale('en', 'US'), // English
Locale('es', 'ES'), // Spanish
Locale('pl', 'PL'),
// ... other locales the …
Run Code Online (Sandbox Code Playgroud) 我从HTTP客户端(Java或Dart - Android应用程序)连接到第三方Web服务器,以下载属于该服务器上当前用户的一些资源(XML或IMG文件).此网站需要使用Google Sing-In登录.我已经在我的Android应用中设置了所有用Google登录用户的内容,我获得了他们的授权idToken.但是如何在HTTP GET或POST方法中实际使用它来下载受保护的资源?
使用BASIC身份验证很容易 - 只需正确设置HTTP'授权'标头("基本"+用户:密码编码为base64),调用GET,然后下载所需的资源.但我无法找到有关如何使用Google Sing-In执行此操作的任何信息.我是否在某些标题中发送了我从Google收到的idToken?还需要什么其他魔力?
假设在 JNI 方法中我想返回一个 Java 字符串(或任何其他 Java 对象)。返回的对象可以是在该方法中创建的本地引用,还是应该将返回值转换为全局引用?
简单的例子:
extern "C"
JNIEXPORT jstring JNICALL Java_some_package_SomeObj_getStringTest(JNIEnv *env, jclass obj)
{
return env->NewString("Test", 4); // OK to return local reference?
}
Run Code Online (Sandbox Code Playgroud)
或者应该是:
extern "C"
JNIEXPORT jstring JNICALL Java_some_package_SomeObj_getStringTest(JNIEnv *env, jclass obj)
{
jstring str = env->NewString("Test", 4);
return env->NewGlobalRef(str); // Must return a global reference?
}
Run Code Online (Sandbox Code Playgroud) android ×2
breakpoints ×1
c++ ×1
dart ×1
debugging ×1
download ×1
flutter ×1
httpclient ×1
java ×1
return-type ×1