我最近创建了一个我在Android项目中导入的库Jar文件.我能够调用函数并使用此Jar文件中存在的类,但Android Studio一直告诉我它不能"解析我正在使用的类的符号".请看下面的截图:
代码构建并成功执行.该函数isThisThingWorking()
只返回true
,这就是boolean blah
设置的内容.
我尝试过按下Sync Project with Gradle Files
按钮并使用Invalidate Caches / Restart...
Android Studio File
菜单中的选项,但这些都没有解决问题.我该怎么做才能使Android Studio IDE不显示Cannot resolve symbol 'xxxSDK'
错误?
我想从Android库项目中创建一个Jar.它设置如下:
ProjectName
\- lib
| \- lib
| \- armeabi
| \- libNativeFirst.so
| \- libNativeSecond.so
\- src
\- main
\- java
\- com.package.sdk
\- PackageSDK.java
Run Code Online (Sandbox Code Playgroud)
我希望所有这些都打包在一个Jar中,但不会泄露存在的源代码PackageSDK.java
.
我这样设置我的build.gradle
文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "18.0.1"
defaultConfig {
minSdkVersion 10
targetSdkVersion 18
}
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/../lib'
}
}
} …
Run Code Online (Sandbox Code Playgroud) 我想将一组位图编码到h264中.这可以通过MediaEncoder吗?我已经编写了一些代码来执行此操作,但输出无法在我尝试过的任何媒体播放器中播放.这里是我主要从Stackoverflow上找到的其他来源借用的一些代码.
mMediaCodec = MediaCodec.createEncoderByType("video/avc");
mMediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240);
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();
mInputBuffers = mMediaCodec.getInputBuffers();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); // image is the bitmap
byte[] input = byteArrayOutputStream.toByteArray();
int inputBufferIndex = mMediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = mInputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input);
mMediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
我应该调整什么?
我正在开发一个Android(v3.0)应用程序,该应用程序需要模仿Google日历上的每周日历布局:
这些活动将基于Google Calendar API的外部请求(我已经开始使用此部分).使用API,我可以获得一周的事件列表,每个事件都有一个开始和结束日期时间.我想使用此数据在类似于上面的视图中向应用程序的用户显示预定事件.
这是我到目前为止所拥有的:
XML出现在下面:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="800dp"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calendar Title"
android:textAppearance="?android:attr/textAppearanceLarge" />
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" >
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="" />
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="Sunday" />
<TextView
android:id="@+id/textView4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="Monday" />
<TextView
android:id="@+id/textView5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="Tuesday" />
<TextView
android:id="@+id/textView6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="Wednesday" />
<TextView
android:id="@+id/textView7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2" …
Run Code Online (Sandbox Code Playgroud) layout android android-layout android-xml android-3.0-honeycomb
我正在开发Android Honeycomb(v3.0)应用程序,该应用程序需要显示存储在设备上注册的Google帐户中的所有联系人.我遇到的一个问题是,我只能检索"我的联系人","Android中已加星标"和"其他联系人"中可用的联系人.我还希望能够从"目录"中检索联系人.我认为"目录"部分是Google向希望向其他人提供其域内所有成员/员工目录的组织和公司提供的功能.请看下面的截图:
到目前为止,我的清单文件中有以下行:
<uses-permission android:name="android.permission.READ_CONTACTS" />
Run Code Online (Sandbox Code Playgroud)
我试过使用这段代码:
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
在我的情况下,"我的联系人"和"在Android中加星标"是空的.但是,获得了"其他联系人"中的(1)联系人.但是,"目录"包含数百个未检索的联系人.
我的问题:有没有办法确保检索"目录"中的联系人?我知道我可以简单地使用网络浏览器复制联系人,然后将它们同步到设备,但如果新的联系人被添加到"目录",我必须每次都手动执行此操作,所以这不是对我来说很棒的选择.请指教.
android google-contacts-api contactscontract android-contacts android-3.0-honeycomb
我有一个奇怪的问题,通过使用MediaRecorder读取使用设备的相机记录的视频文件的长度/持续时间.该文件记录在应用程序的专用存储目录中,其目的如下:
mMediaRecorder.setOutputFile(context.getFilesDir() + "/recordings/webcam.3gpp");
Run Code Online (Sandbox Code Playgroud)
录制完成后,我尝试使用以下方法读取视频的长度:
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(context.getFilesDir() + "/recordings/webcam.3gpp");
String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
return Long.parseLong(time);
Run Code Online (Sandbox Code Playgroud)
MediaPlayer mp = MediaPlayer.create(context, Uri.parse(context.getFilesDir() + "/recordings/webcam.3gpp"));
long duration = mp.getDuration();
mp.release();
return duration;
Run Code Online (Sandbox Code Playgroud)
这些方法都不起作用.mediaMetadataRetriever.extractMetadata
返回null并MediaPlayer.create
失败并返回IOException.我已经验证该文件存在.
重要说明:如果我将录音保存到"/sdcard/recordings/webcam.3gpp",则不会发生此问题.出于某种原因,我只是无法读取文件位于属于应用程序的专用文件目录中的持续时间.此外,这个问题只发生在运行Android 2.3的Samsung Droid Charge上.它不会发生在运行Android 4.2的三星Galaxy S4和运行Android 4.3的华硕Nexus 7上.
如果我拿相同的文件并将其复制到SD卡,然后在那里读取它的长度,一切正常.是什么赋予了?
copy(new File(context.getFilesDir() + "/recordings/webcam.3gpp"), new File("/sdcard/wtfisthiscrap.3gpp"));
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource("/sdcard/wtfisthiscrap.3gpp");
String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
return Long.parseLong(time); // works!
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
android android-video-player android-camera android-mediaplayer android-mediarecorder
我正在开发Android Honeycomb(v3.0)应用程序,该应用程序需要与Google Calendar API进行通信.我想允许我的应用访问特定Google帐户的日历数据,以便阅读和创建活动.
不幸的是,我使用OAuth2遇到授权问题.这是我到目前为止所拥有的:
1)我想访问其日历的Google帐户是在我正在使用的Android设备中注册的.
2)我在帐户的Google API控制台中启用了Calendar API.
3)我可以使用以下代码访问此帐户:
AccountManager accountManager = AccountManager.get(this.getBaseContext());
Account[] accounts = accountManager.getAccountsByType("com.google");
Account acc = accounts[0]; // The device only has one account on it
Run Code Online (Sandbox Code Playgroud)
4)我现在想要获得一个AuthToken,以便在与日历通信时使用.我遵循了本教程,但将所有内容转换为适用于Google日历而非Google任务.我通过使用with 成功authToken
从AccountManager
我想要使用的帐户中检索一个.getAuthToken
AUTH_TOKEN_TYPE == "oauth2:https://www.googleapis.com/auth/calendar"
5)这是问题开始的地方.我现在在这一点上:
AccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(tokens[0]); // this is the correct token
HttpTransport transport = AndroidHttp.newCompatibleTransport();
Calendar service = Calendar.builder(transport, new JacksonFactory())
.setApplicationName("My Application's Name")
.setHttpRequestInitializer(accessProtectedResource)
.build();
service.setKey("myCalendarSimpleAPIAccessKey"); // This is deprecated???
Events events = service.events().list("primary").execute(); // …
Run Code Online (Sandbox Code Playgroud) android google-calendar-api google-api google-api-java-client android-3.0-honeycomb
有时,当我尝试在我的Droid Charge(运行Gingerbread)上"运行"我的应用程序时,Eclipse在控制台中显示以下内容:
[2012-05-31 23:08:50 - SomeApp] Android Launch!
[2012-05-31 23:08:50 - SomeApp] adb is running normally.
[2012-05-31 23:08:50 - SomeApp] Performing com.test.SomeActivity activity launch
[2012-05-31 23:08:52 - SomeApp] Uploading SomeApp.apk onto device 'DEVICEIDHERE'
[2012-05-31 23:08:52 - SomeApp] Installing SomeApp.apk...
[2012-05-31 23:08:53 - SomeApp] Success!
[2012-05-31 23:08:53 - SomeApp] Starting activity com.test.SomeActivity on device DEVICEIDHERE
Run Code Online (Sandbox Code Playgroud)
但是,应用程序永远不会在手机上启动.我无法看到.apk曾经安装在应用程序列表中.
我该怎么做才能推出它?AVD通过仿真器运行时效果很好.
谢谢!
我想在我的Android库的发布版本上运行ProGuard.以下是build.gradle
我的项目中的文件.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "18.0.1"
defaultConfig {
minSdkVersion 10
targetSdkVersion 18
}
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/../lib'
}
}
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android.txt')
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行gradlew clean
或gradlew build
返回以下错误:
> Could not find method buildTypes() for arguments [build_25r1m0a3etn5cudtt5odlegprd$_run_closure2_closure10@5f3306ad] on project …
android proguard gradle android-library android-gradle-plugin
我试图让我的所有活动都有一个自定义主题样式,如下所示:
这个主题适用于许多设备,包括Nexus 7,三星Galaxy S4和三星Droid Charge(运行姜饼).但是,在其他设备上,例如HP Slate 7和Motorola Droid RAZR,它最终看起来像这样:
我AndroidManifest.xml
的application
标签中有以下内容:
android:theme="@style/AppTheme"
Run Code Online (Sandbox Code Playgroud)
主题如下res/values/styles.xml
:
<style name="AppBaseTheme" parent="@android:style/Theme.Light.NoTitleBar">
</style>
<style name="AppTheme" parent="@style/AppBaseTheme">
<item name="android:windowBackground">@color/background</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我还加了styles.xml
下res/values-v11
.这是适用的风格:
<style name="AppBaseTheme" parent="@android:style/Theme.Holo.Light.NoActionBar">
</style>
Run Code Online (Sandbox Code Playgroud)
最后,这似乎在styles.xml
下面res/values-v14
:
<style name="AppBaseTheme" parent="@android:style/Theme.DeviceDefault.Light">
</style>
Run Code Online (Sandbox Code Playgroud)
我试图为每个活动定义主题并手动使用该setTheme()
功能onCreate()
,但没有任何效果.我还试图在每个人手动设置一个背景Activity
,但这也不起作用.我该怎么做才能解决我的问题?
编辑:有趣的是设置android:background
样式使其工作,但是那些不应该有背景的元素也会收到背景颜色.
android android-manifest android-layout android-activity android-styles
我目前在我的一个Android项目中使用FontAwesome.我主要用它来显示某些按钮上文字左侧的图标.我注意到,自从将我的一个测试设备升级到Lollipop后,图标开始下降到按钮上文本的基线以下.请看下面的图片:
请注意,第一张图像中图标的底部位于文本的基线上,而第二张图像中图标的底部位于基线下方.
<string name="button_text_logout">? LOG OUT</string>
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="@dimen/text_size_menu_item"
android:textColor="@color/white"
android:gravity="center_vertical"
android:text="@string/button_text_logout"
android:paddingLeft="@dimen/action_item_padding"
android:paddingRight="@dimen/action_item_padding"/>
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf");
logOutTextView.setTypeface(typeface);
Run Code Online (Sandbox Code Playgroud)
我正在使用fa-sign-out图标.该代码适用于运行5.0之前的Android版本的所有设备.有没有什么办法解决这一问题?
android textview android-layout font-awesome android-5.0-lollipop
我正在努力转换使用旧的Web标准创建的网页,以支持现代Web浏览器.该网页当前在Internet Explorer 9,Firefox和Chrome中以Quirks模式呈现.
在IE9中,我可以选择"文档模式",我希望在其中显示我正在查看的网页.这使事情变得更容易,因为我可以在Quirks模式和IE9标准模式之间跳转.我不必在网页代码中添加/修改DOCTYPE标记.
我可以在Firefox和Chrome中执行相同的操作吗?
android ×11
gradle ×2
adb ×1
android-xml ×1
bitmap ×1
browser ×1
eclipse ×1
firefox ×1
font-awesome ×1
google-api ×1
h.264 ×1
jar ×1
java ×1
layout ×1
proguard ×1
quirks-mode ×1
textview ×1