没有内置FM收音机的主流android手机收音机...

Android应用源码MTK6589自带收音机(无法运行)
今天是&&日&&&&&&星期一
您还没有登录,&&&&
当前位置:
,Android应用源码MTK6589自带收音机(无法运行)
更新时间:日
浏览次数:2540 次
下载次数:69 次
MTK6589手机有自带的收音机模块源码,无需网络就可以听收音机,需要MTK6589芯片手机上运行,缺少联发科的mon.featureoption.FeatureOption依赖包,不能单独运行,慎下,需要的朋友仅作参考。
文件夹 PATH 列表
卷序列号为 004B:D088
JavaApk源码说明.txt
目录列表.txt
└─FMRadio
Android.mk
AndroidManifest.xml
└─mediatek
└─FMRadio
ExtensionUtils.java
Android.mk
└─mediatek
└─FMRadio
DefaultProjectStringExt.java
IProjectStringExt.java
├─drawable
btn_fm_decrease_frequency.xml
btn_fm_favorite_off_selector.xml
btn_fm_favorite_on_selector.xml
btn_fm_increase_frequency.xml
btn_fm_list_selector.xml
btn_fm_next.xml
btn_fm_overflow_selector.xml
btn_fm_powerdown_selector.xml
btn_fm_powerup_selector.xml
btn_fm_previous.xml
btn_fm_record.xml
btn_fm_rec_play.xml
btn_fm_rec_stop.xml
├─drawable-hdpi
bg_rec_infobar.9.png
bottom_bar.9.png
btn_fm_decrease.png
btn_fm_decrease_disable.png
btn_fm_favorite_off.png
btn_fm_favorite_on.png
btn_fm_increase.png
btn_fm_increase_disable.png
btn_fm_list.png
btn_fm_list_disable.png
btn_fm_loud.png
btn_fm_nextstation.png
btn_fm_nextstation_disable.png
btn_fm_overflow.png
btn_fm_overflow_disable.png
btn_fm_prevstation.png
btn_fm_prevstation_disable.png
btn_fm_record_disabled.png
btn_fm_record_enabled.png
btn_fm_rec_playback_disabled.png
btn_fm_rec_playback_enabled.png
btn_fm_rec_stop_disabled.png
btn_fm_rec_stop_enabled.png
btn_fm_start.png
btn_fm_start_disable.png
btn_fm_stop.png
btn_fm_stop_disable.png
fm_anim.png
fm_title_icon.png
ic_launcher_temp.png
├─drawable-ldpi
bg_rec_infobar.9.png
bottom_bar.9.png
btn_fm_decrease.png
btn_fm_decrease_disable.png
btn_fm_favorite_off.png
btn_fm_favorite_on.png
btn_fm_increase.png
btn_fm_increase_disable.png
btn_fm_list.png
btn_fm_nextstation.png
btn_fm_nextstation_disable.png
btn_fm_prevstation.png
btn_fm_prevstation_disable.png
btn_fm_record_disabled.png
btn_fm_record_enabled.png
btn_fm_rec_playback_disabled.png
btn_fm_rec_playback_enabled.png
btn_fm_rec_stop_disabled.png
btn_fm_rec_stop_enabled.png
fm_anim.png
fm_title_icon.png
ic_launcher_temp.png
├─drawable-mdpi
bg_rec_infobar.9.png
bottom_bar.9.png
btn_fm_decrease.png
btn_fm_decrease_disable.png
btn_fm_favorite_off.png
btn_fm_favorite_on.png
btn_fm_increase.png
btn_fm_increase_disable.png
btn_fm_list.png
btn_fm_list_disable.png
btn_fm_loud.png
btn_fm_nextstation.png
btn_fm_nextstation_disable.png
btn_fm_overflow.png
btn_fm_overflow_disable.png
btn_fm_prevstation.png
btn_fm_prevstation_disable.png
btn_fm_record_disabled.png
btn_fm_record_enabled.png
btn_fm_rec_playback_disabled.png
btn_fm_rec_playback_enabled.png
btn_fm_rec_stop_disabled.png
btn_fm_rec_stop_enabled.png
btn_fm_start.png
btn_fm_start_disable.png
btn_fm_stop.png
btn_fm_stop_disable.png
fm_anim.png
fm_title_icon.png
ic_launcher_temp.png
├─drawable-sw1024dp-ldpi
btn_fm_favorite_off.png
btn_fm_favorite_on.png
├─drawable-xhdpi
bg_rec_infobar.9.png
bottom_bar.9.png
btn_fm_decrease.png
btn_fm_decrease_disable.png
btn_fm_favorite_off.png
btn_fm_favorite_on.png
btn_fm_increase.png
btn_fm_increase_disable.png
btn_fm_list.png
btn_fm_list_disable.png
btn_fm_nextstation.png
btn_fm_nextstation_disable.png
btn_fm_overflow.png
btn_fm_overflow_disable.png
btn_fm_prevstation.png
btn_fm_prevstation_disable.png
btn_fm_record_disabled.png
btn_fm_record_enabled.png
btn_fm_rec_playback_disabled.png
btn_fm_rec_playback_enabled.png
btn_fm_rec_stop_disabled.png
btn_fm_rec_stop_enabled.png
btn_fm_start.png
btn_fm_start_disable.png
btn_fm_stop.png
btn_fm_stop_disable.png
fm_anim.png
fm_title_icon.png
ic_launcher_temp.png
├─layout
addstation.xml
editstation.xml
favorite.xml
fm_recorder_dialog.xml
fm_rx_em.xml
simpleadapter.xml
├─layout-sw1024dp-land
├─layout-sw1024dp-port
fm_action_bar.xml
fm_menu.xml
├─values
strings.xml
├─values-ar
strings.xml
├─values-bn
strings.xml
├─values-cs
strings.xml
├─values-de
strings.xml
├─values-el
strings.xml
├─values-en-rUS
strings.xml
├─values-es
strings.xml
├─values-fa
strings.xml
├─values-fr
strings.xml
├─values-hi
strings.xml
├─values-hu
strings.xml
├─values-in
strings.xml
├─values-it
strings.xml
├─values-iw
strings.xml
├─values-km-rKH
strings.xml
├─values-ko
strings.xml
├─values-ms
strings.xml
├─values-my-rMM
strings.xml
├─values-nl
strings.xml
├─values-pt
strings.xml
├─values-pt-rPT
strings.xml
├─values-ro
strings.xml
├─values-ru
strings.xml
├─values-th
strings.xml
├─values-tl
strings.xml
├─values-tr
strings.xml
├─values-ur
strings.xml
├─values-vi
strings.xml
├─values-zh-rCN
strings.xml
└─values-zh-rTW
strings.xml
└─mediatek
└─FMRadio
FMRadioActivity.java
FMRadioContentProvider.java
FMRadioEMActivity.java
FMRadioFavorite.java
FMRadioListener.java
FMRadioNative.java
FMRadioService.java
FMRadioStation.java
FMRadioUpgradeReceiver.java
FMRadioUtils.java
FMRecordDialogFragment.java
FMRecorder.java
LogUtils.java
└─dialogs
AddFavoriteDialog.java
DeleteFavoriteDialog.java
EditFavoriteDialog.java
NoAntennaDialog.java
SearchChannelsDialog.java
└─turnkey
└─mediatek
└─FMRadio
ExtensionUtils.java
您必须才能评论.
&&常见问题
&&充值交易
&&快捷通道
&&用户中心
· 鲁ICP备号-1· Powered by · Theme by JavaApkTM
· .13 queries in 0.418 seconds当前位置: →
--一款无需联网的调频收音机,不是网络收音机哦。需要硬件支持。
--支持在87.5MHZ~108MHZ之间频率的频道搜索。
--支持时事,体育,新闻,科技,文学,各种音乐,各种戏剧等等内容的搜索.
--支持扫描并保存电台,方便下次直接打开使用.
--使用时请插入耳机,否则无法开启程序
由于是汉化过的,已经重新签名,所以安装过英文版,请先卸载再安装此版本.
安装及卸载:
正常安装,正常卸载.
需要先卸载掉原来安装的版本,再安装此版本.
复制到sd卡后点击安装.
Apktool 嵌入汉化
?上一软件:
?下一软件:
& &评论摘要(共 0 条,得分 0 分,平均 0 分)
* 推荐浏览器自带下载工具下载,本站对单线程无限制带宽。
* 本站内软件除个别外均为.apk格式,下载后拷入手机内存卡直接安装,若下载后为zip格式且压缩包内没有.apk文件,则需将压缩文件扩展名直接更改为.apk。
* 下载本站资源,如果服务器暂不能下载请过一段时间重试!
* 如果您发现下载链接错误,请点击谢谢!
* 站内提供的所有软件包含破解及注册码均是由网上搜集,若侵犯了你的版权利益,通知我们!
Copyright &
. All Rights Reserved.
网站备案号:Android实现FM收音机实现
Android实现FM收音机实现
[摘要:完成源码下载链接
http://download.csdn.net/detail/hi_zhengjian/8794731
***方式一:间接正在app内里经过JNI拜访HAL层***
FmRadio运用代码布局以下:
实现源码下载链接
http://download.csdn.net/detail/hi_zhengjian/8794731
***方法一:直接在app里面通过JNI访问HAL层***
FmRadio应用代码结构如下:
一、FMRadio.java通过FmRadioService提供的服务通过JNI访问到HAL层:
FmRadioService实现IfmService的一些接口,以及提供一些供Client调用的接口,接口里面调用到JNI。
FmRadioService.java中private voidenableFmFacility(boolean bEnable)调用到
enableFmFacility_native。
enableFmFacility_native在com_android_server_FmService.cpp中实现,在映射表中注册,也就是所谓的JNI. 最终调用com_android_server_FmService.cpp中的android_FmService_enableFmFacility。
二、JNI简介:
传统的JNI需要遵循一定的命名规则,而Android改变了这种方式,可以通过以下两种方法把java层与C++层的代码进行映射,如下:
第一个参数是Java层的函数,第二个参数是函数的参数和返回类型也是属于java层,第三个参数是JNI实现的c++函数
const JNINativeMethodgMethods[] = {
&&& /* name,&&&&&&&&&&&&&&&&&&&&&&&signature,&&&&& funcPtr */
&&& { &enableFmFacility_native&,&&(Z)I&,& &&&&&&&(void*)android_FmService_enableFmFacility& },
&&& { &setFmCurrentFreq_native&,&&&&(II)I&,&&&& (void*)android_FmService_setFmCurrentFreq& },
&&&&&& { &stationIsAvailable_native&,&&()Z&,&&&&&&&&& (void*)android_FmService_stationIsAvailable&&},
&&& { &fm_mute_native&,&&&&&&&&&&&&&&&&&&&&&(I)I&,&&&&&&&&&&&&& (void*)android_FmService_fm_mute& },
下面这个函数是将所有的映射函数进行注册
int registerMethods(JNIEnv*env) {
&&& static
const char* const kClassName =
&&&&&&& &com/rk/FmRadio/FmRadioService&;
&&& /* look up the class */
&&& clazz = env-&FindClass(kClassName);
&&& if (clazz == NULL) {
&&&&&&& return -1;
&&& /* register all the methods */
&&& if(env-&RegisterNatives(clazz,gMethods,
&&&&&&&&&&& sizeof(gMethods) /sizeof(gMethods[0])) != JNI_OK)
&&&&&&& return -1;
&&& /* fill out the rest of the ID cache */// .! :
在 FM 实现中, 没有必要 cache Java 类 or field 的 ID.
&&& return cacheIds(env,clazz);
然后需要重写JNI_OnLoad函数,这个函数一定要重载,当调用System.loadLibrary(&rockchip_radio_jni&);的时候,JVM启动的时候就会自动加载,并将我们的函数注册到系统JNI,以便调用。
jintJNI_OnLoad(JavaVM* vm, void* reserved) {
&&& JNIEnv* env = NULL;
&&& jint result = -1;
&&& if (vm-&GetEnv((void**) &env,JNI_VERSION_1_4) != JNI_OK) {
&&&&&&& goto
&&& assert(env != NULL);
&&& if(registerMethods(env) != 0) {
&&&&&&& goto
&&& /* success -- return valid version number */
&&&result = JNI_VERSION_1_4;
&&& return
或者如果在framework层也可以在framework/base/services/jni/onload.app文件中直接在下面这个方法里面添加我们的注册函数,这样也能将我们自己的函数列表注册到系统JNI里面。
JNI可以参考文档http://blog.csdn.net/zhenyongyuan123/article/details/5862054
最后特别需要注意的是,JNI里面注册的函数列表,在Java除了声明为native函数以外,而且在service里面必须要调用到,否则会出现找不到该函数。
注册好JNI之后,启动service进行访问,要注意的是系统app在Android4.2以后不能直接通过传统的startservice(intent)启动,这样会出现权限问题,因为4.2以后Android引入多用户操作,需要如下方式启动
startServiceAsUser(mServiceIntent,newUserHandle(UserHandle.USER_CURRENT));
参考文档http://xxhalbert./blog/static//
三、android_FmService_enableFmFacility会调用loadFmHal(&sFmControlDevice)
接口,loadFmHal(&sFmControlDevice)中会调用到\hardware\rk28\fm\fm.c的fm_control_open(&module-&common,controlDevice),从而进入HAL层。
fm_control_open(&module-&common,controlDevice)定义如下:
inline intfm_control_open(const struct hw_module_t* module, fm_control_device_t** device)
&&& return module-&methods-&open(module,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&FM_HARDWARE_CONTROL,
&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&(structhw_device_t**)device);
========================================================================================================================================
类似的,其他从上层的调用也会最终调用到fm.c的其他函数,例如:
static boolean control_context__get_fm_stationIsAvailable(fm_control_device_t*dev)
&&& int result = 0;
&&& fm_control_context_t* this =(fm_control_context_t*)
&&& /* 若用户已经禁用了 fm
&&& if ( !(this-&is_fm_facility_enabled ) )
&&&&&&& E(&fm facility is totallydisabled.&);
&&&&&&& result = -1;
&&&&&&& goto EXIT;
&& &result =get_fm_stationIsAvailable();
=====================================================================================================================================
int get_fm_stationIsAvailable()
&&& if(fm_fd & 0)
&&&&&&& E(&no init \n&);
&&&&&&& return -1;
&&& ret =ioctl(fm_fd,FM_STATION_ISAVAILABLE,&state);//对于Kernel,需实现这一类调用对应的驱动
&&& if(ret & 0)
&&&&&&& E(&FM GET stationIsAvailable err,%s\n&, strerror(errno));
&&&&&&&&&& return -1;
========================================================================================================================================
Android.mk中也要设置相应的值(黑体字):
# Copyright (C) 2008 The Android Open Source Project
# Licensed under the Apache License, Version 2.0 (the&License&);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#&&&&&http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing,software
# distributed under the License is distributed on an &ASIS& BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express orimplied.
# See the License for the specific language governing permissionsand
# limitations under the License.
# This makefile supplies the rules for building a library of JNIcode for
# use by our example platform shared library.
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS :=& -llog
LOCAL_MODULE_TAGS := eng
# This is the target being built.
LOCAL_MODULE:=librockchip_radio_jni
# All of the source files that we will compile.
LOCAL_SRC_FILES:= \
&&&&& com_android_server_FmService.cpp
# All of the shared libraries we link against.
LOCAL_SHARED_LIBRARIES := \
&&&& libandroid_runtime \
&&&& libnativehelper \
&&&& #libdwaharre \
&&&& libcutils \
&&&& libutils \
&&&& liblog \
&&&&& libhardware
# No static libraries.
LOCAL_STATIC_LIBRARIES :=
# Also need the JNI headers.
LOCAL_C_INCLUDES += \
&&&& $(JNI_H_INCLUDE)
# No specia compiler flags.
LOCAL_CFLAGS =
# Don't prelink this library.&For more efficient code, you may want
# to add this library to the prelink map and set this to true.
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
***方法二,将服务和JNI调用写在framework里面***
一、应用层:
代码packages\apps\FmRadio
FmRadioService中会有如此调用:
private FmManagermM
mManager =(FmManager)FmRadioService.this.getSystemService(FM_SERVICE);
mManager.setFmCurrentFreq(currentFreq,direct);
通过FmManager我们可以调用到在Framework中启动的FmService。FmManager我们在framewok层中实现,并且在core/java/android/app/ContextImpl.java中注册,以便应用层可以像上面那样获取服务。
二、Framework层:
代码路径frameworks/base
修改的文件如下:
api/current.txt
core/java/android/app/ContextImpl.java
core/java/android/content/Context.java
& & core/java/android/view/KeyEvent.java
core/jni/AndroidRuntime.cpp
core/res/res/values/attrs.xml
services/java/com/android/server/SystemServer.java
services/jni/onload.cpp
新增的文件
core/java/android/os/FmManager.java
core/java/android/os/IFmManager.aidl
services/java/com/android/server/fm/FmService.java
services/jni/com_android_server_fm_FmService.cpp
实现开机时启动FmService,FmService随SystemServe启动,&
FmService 在 system 进程中, 具体实现 IFmManager 接口,FmServic实现的接口会通过JNI调用到com_android_server_fm_FmService.cpp实现的内容,JNI的内容会编译进system/lib/libandroid_servers.so以供调用。
FmService.java如下:
core/java/android/os/IFmManager.aidl如下
可以参考下面的网站来加,android 平台添系统服务:
/android/1344211.html
/content/12/00_.shtml
三、HAL层代码如下
/hardware/rk28/fm
Android.mk
Hal层是编译/hardware/rk29/fm成/system/lib/hw/fm.rk2928board.so,这个命名是有讲究的,随意命名可能会导致加载失败, hardware\rk29\fm\Android.mk中LOCAL_MODULE:= fm.$(TARGET_BOARD_HARDWARE),
JNI中的com_android_server_fm_FmService.cpp中会调用hw_get_module来加载fm.rk2928board.so,如下:
static int loadFmHal(fm_control_device_t**controlDevice)
&&& int result = 0;
&&& hw_module_t const*
&& D(&Load FM HAL module and open controldevice.&);
&&& /* 尝试加载 HDMI HAL module的实例数据. */
& if ( (result =hw_get_module(FM_HARDWARE_MODULE_ID, &module) ) != 0 )
&&&&&&& E(&Fail to load .so file of FM HALmodule. result = %d&, result);
&&&&&&& goto EXIT;
&&& /* 获取 控制设备的实例. */
&&& if ( (result = fm_control_open(module,controlDevice) != 0 ) )
&&&&&& E(&Fail to open control device ofFM HAL module. result = %d&, result);
&&&&&&& goto EXIT;
hardware\libhardware\hardware.c中对.so进行筛选,然后调用load来加载
int (const char *id, const struct hw_module_t **module)
&& D(&hw_get_module&);
&&& return hw_get_module_by_class(id, NULL,module);
int hw_get_module_by_class(constchar *class_id, const char *inst,
&&&&&&&&&&&&&&&&&&&&&&&&&& const structhw_module_t **module)
&&& const struct hw_module_t *hmi = NULL;
&&& char prop[PATH_MAX];
&&& char path[PATH_MAX];
&&& char name[PATH_MAX];
& && //D(&1111111&);
&&&&&&& snprintf(name, PATH_MAX,&%s.%s&, class_id, inst);
&& //D(&&);
&&& if (inst)
&&&&&&& snprintf(name, PATH_MAX,&%s.%s&, class_id, inst);
&&&&&&& strlcpy(name, class_id, PATH_MAX);
& //D(&&);
& &&&*Here we rely on the fact that calling dlopen multiple times on
&&&& * the same .so will simply increment arefcount (and not load
&&&& * a new copy of the library).
&&&& * We also assume that dlopen() isthread-safe.
&&& /* Loop through the configuration variantslooking for a module */
&&& for (i=0 ; i&HAL_VARIANT_KEYS_COUNT+1 ;i++) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&//D(&55555&);
&&&&&&& if (i & HAL_VARIANT_KEYS_COUNT) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&//D(&66666&);
&&&&&&&&&&& if (property_get(variant_keys[i],prop, NULL) == 0) {
& &&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& snprintf(path, sizeof(path),&%s/%s.%s.so&,
&&&&&&&&&&&&&&&&&&&& HAL_LIBRARY_PATH2, name,prop);
&&&&&&&&&&& if (access(path, R_OK) == 0)
&&&&&&&&&&& snprintf(path, sizeof(path),&%s/%s.%s.so&,
&&& &&&&&&&&&&&&&&&&&HAL_LIBRARY_PATH1, name,prop);
&&&&&&&&&&& if (access(path, R_OK) == 0)
&&&&&&& } else {
&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&//D(&7777&);
&&&&&&&&&&& snprintf(path, sizeof(path),&%s/%s.default.so&,
&&&&&&&&&&&&&&&&&&&& HAL_LIBRARY_PATH2, name);
& &&&&&&&&&&if (access(path, R_OK) == 0)
&&&&&&&&&&& snprintf(path, sizeof(path),&%s/%s.default.so&,
&&&&&&&&&&&&&&&&&&&& HAL_LIBRARY_PATH1, name);
&&&&&&&&&&& if (access(path, R_OK) == 0)
&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&//D(&8888&);
&&& status = -ENOENT;
&&& if (i & HAL_VARIANT_KEYS_COUNT+1) {
&&&&&&& &&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&//D(&9999&);
&&&&&&& /* load the module, if this fails,we're doomed, and we should not try
&&&&&&&& * to load a different variant. */
&&&&&& &status = load(class_id, path, module);
HAL层调试注意点:
(1)Rk28_fm.h (hardware\rk29\fm\primitive) 中定义文件节点路径,和kernel一致, #define FM_DEV&/dev/RADIO_FM8035&
Fm8035.c (kernel\drivers\fm\qn8035) #define DRV_NAME&RADIO_FM8035&//&FM8035&
fm_fd = open(FM_DEV, O_RDWR);
if(fm_fd & 0){
&&&&& E(&open %s err,%s\n&, FM_DEV, strerror(errno));
&&&&& return -1;
调用到驱动中的fm8035.c的int fm8035_dev_open(struct inode*inode, struct file *filp)
struct fm8035_dev_s *dev =&fm8035_
printk(&-----------rtc& fm8035_open !&);
filp-&private_data =
rk28_fm.c中ret = ioctl(fm_fd, FM_TR_FUN_STOP, 1);
调用到fm8035.c的int fm8035_dev_ioctl(struct inode*inode, unsigned int cmd, unsigned long arg)
参数个数要对应,否则会报inalid argument
(3)device\rockchip\rksdk\init.rc中加上权限chmod 0664 /dev/RADIO_FM8035&chown system system /dev/RADIO_FM8035这样rk28_fm.c中int fm_init(sighandler_t fm_sighandler)执行& fm_fd = open(FM_DEV, O_RDWR);的时候才不会报permission denies(权限问题)。
(4) 在device/rockchip/rksdk/device.mk中
这里,加上fm.$(TARGET_BOARD_HARDWARE)
HAL层的了解可以参考文章
http://blog.csdn.net/sfrysh/article/details/7931593
感谢关注 Ithao123Android频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
IThao123周刊股票/基金&
11.29安卓应用推荐:不用流量真收音机
  第1页:幽灵收音机  广播是三大传统媒体之一,即使是现在也有很多人喜欢在没事,或者是不怎么忙的时候听听广播消遣一下。今天小编在《每日安卓软件游戏推荐》中推荐了一款不使用流量的收音机应用,还推荐了四款优秀的网络收音机。  《每日安卓软件游戏推荐》依托于(,)在线手机软件下载频道,致力于为您发掘最好用的安卓软件和最好玩的安卓游戏,并为安卓Android手机用户提供最优质的安卓软件、安卓游戏下载服务。《每日安卓软件游戏推荐》涵盖社区交友、影音媒体、日常应用、通讯辅助、系统工具等各类Android软件,并提供安卓手机主题、安卓刷机Rom等资源的免费下载。  11月29日安卓应用推荐:软件名称:幽灵收音机适用系统:Android 2.1或更高版本软件大小:760 KB下载地址:点击下载  幽灵收音机,英文名为Spirit FM,是一款基于硬件的收音机。幽灵收音机通过调用系统收音机的API接口,捕捉电磁波信号,不用流量就能够收听广播信号。软件截图  安装应用后需要进行两个设置,一是在设置中选择对应的国家以方便程序扫描;而是在audio中的method设置自己的机型,以方便程序查找API接口。没有设置有可能无法使用。软件截图  本来安卓系统自带了收音机的,但不知为何现在似乎很多安卓手机都“精简”了收音机应用,这个应用恰好弥补了这个遗憾。另外,使用此应用时最好插上耳机,以获取更好的信号质量。  二维码及使用方法:  注意到表格右侧像迷宫一样的图片了吗?它们就是“二维码”。  二维码是二维条形码的一种,可以将网址、文字、照片等信息通过相应的编码算法编译成为一个方块形条码图案,手机用户可以通过摄像头和解码软件将相关信息重新解码并查看内容。简单来说就是,如果您想要下载哪款限免软件,只需要拿出手机对准右侧二维码轻轻一拍,软件就会自动下载到您的手机上,省去了您点击链接查看的时间,十分方便。  但是想要使用此功能,还需在您的手机上安装一款二维码识别软件以获取二维码中的信息。安装完成后就可以拿出手机拍照下载了。  点击下载二维码应用  .cn/detail/19/18365.shtml  11月安卓推荐回顾SunMonTueWedThuFriSat2728293031123456789101112131415161718192021222324252627282930第2页:龙卷风网络收音机  11月29日安卓应用推荐:软件名称:龙卷风网络收音机适用系统:Android 1.6或更高版本软件大小:1.54 MB下载地址:点击下载  龙卷风网络收音机是一款跨平台的免费网络电台收听软件。当前软件已支持Windows、安卓、iOS系统,用户可在电脑、安卓手机及平板、iPhone及iPad上使用该应用。安卓手机截图  收集了全球几千个广播电台,包括中央电台,各省市电台,台湾电台,香港电台,澳门电台,各国台。网罗财经、娱乐、社会新闻,外语电台、流行歌曲、摇滚乐、爵士乐、民乐、交响乐等各类音乐应有尽有。安卓平板截图  龙卷风收音机功能强大,可以收听电台、内置录音、定时录音、定时播放、定时关机、断线自动重连、语音报时、在线更新、皮肤切换、多国语言、热键操作等。  二维码及使用方法:  注意到表格右侧像迷宫一样的图片了吗?它们就是“二维码”。  二维码是二维条形码的一种,可以将网址、文字、照片等信息通过相应的编码算法编译成为一个方块形条码图案,手机用户可以通过摄像头和解码软件将相关信息重新解码并查看内容。简单来说就是,如果您想要下载哪款限免软件,只需要拿出手机对准右侧二维码轻轻一拍,软件就会自动下载到您的手机上,省去了您点击链接查看的时间,十分方便。  但是想要使用此功能,还需在您的手机上安装一款二维码识别软件以获取二维码中的信息。安装完成后就可以拿出手机拍照下载了。  点击下载二维码应用  .cn/detail/19/18365.shtml  11月安卓推荐回顾SunMonTueWedThuFriSat2728293031123456789101112131415161718192021222324252627282930第3页:TuneIn Radio  11月29日安卓应用推荐:软件名称:TuneIn Radio适用系统:Android 2.3或更高版本软件大小:9.05 MB下载地址:点击下载  TuneIn是一种全新的收听方式,只要有网络,你就可以从地球的任意角落收听7万多个电台,及200多万个点播节目,包括音乐,体育及新闻时事。软件截图  软件支持用歌名,艺人名或节目名搜索,了解世界上哪些电台正在播放这些内容;支持边听边暂停、回放广播、录制任意电台;能将电台、歌曲、节目加入您的预置;可以早晨跟着闹钟醒来,晚上同定时睡眠器入睡;还能在使用其他应用程式时,在后台播放节目。软件截图  TuneIn Radio 以其超丰富的内容、简单的操作界面和不错的连接速度而广受好评。在iOS、安卓、Windows RT、WP等系统上都是排名靠前的网络电台应用。  二维码及使用方法:  注意到表格右侧像迷宫一样的图片了吗?它们就是“二维码”。  二维码是二维条形码的一种,可以将网址、文字、照片等信息通过相应的编码算法编译成为一个方块形条码图案,手机用户可以通过摄像头和解码软件将相关信息重新解码并查看内容。简单来说就是,如果您想要下载哪款限免软件,只需要拿出手机对准右侧二维码轻轻一拍,软件就会自动下载到您的手机上,省去了您点击链接查看的时间,十分方便。  但是想要使用此功能,还需在您的手机上安装一款二维码识别软件以获取二维码中的信息。安装完成后就可以拿出手机拍照下载了。  点击下载二维码应用  .cn/detail/19/18365.shtml  11月安卓推荐回顾SunMonTueWedThuFriSat2728293031123456789101112131415161718192021222324252627282930第4页:优听Radio网络收音机  11月29日安卓应用推荐:软件名称:优听Radio适用系统:Android 1.6或更高版本软件大小:3.9 MB下载地址:点击下载  优听Radio全名为优听Radio网络电台收音机,其前身是AnyRadio网络收音机。可以通过网络方式播放广播电台,资源丰富,包括中央人民广播电台(CNR)、中国国际广播电台(CRI),所有地方频道,北京、天津、上海、港澳台等,国外频道,BBC、VOA等等,应有尽有。软件截图  软件支持推荐的热门电台和热门节目推荐,热门节目浏览时可以直接设置为定时播放;支持超过6000个频道的在线播放,音质好,播放流畅;支持电台地址输入功能,可以收听自己喜爱的任何节目;有云功能,支持电台录制,有流量监控功能。软件截图  软件还支持本地电台功能,方便找到用户所在地区的频道;支持定时停止功能与定时播放功能;还有着丰富的电台辅助信息,包括电台节目表、电台论坛,可互动交流,给您更好的收听体验。  二维码及使用方法:  注意到表格右侧像迷宫一样的图片了吗?它们就是“二维码”。  二维码是二维条形码的一种,可以将网址、文字、照片等信息通过相应的编码算法编译成为一个方块形条码图案,手机用户可以通过摄像头和解码软件将相关信息重新解码并查看内容。简单来说就是,如果您想要下载哪款限免软件,只需要拿出手机对准右侧二维码轻轻一拍,软件就会自动下载到您的手机上,省去了您点击链接查看的时间,十分方便。  但是想要使用此功能,还需在您的手机上安装一款二维码识别软件以获取二维码中的信息。安装完成后就可以拿出手机拍照下载了。  点击下载二维码应用  .cn/detail/19/18365.shtml  11月安卓推荐回顾SunMonTueWedThuFriSat2728293031123456789101112131415161718192021222324252627282930第5页:蜻蜓FM  11月29日安卓应用推荐:软件名称:蜻蜓.fm适用系统:Android 2.2或更高版本软件大小:7.31 MB下载地址:点击下载  蜻蜓.fm收音机是一款提供跨地域收听完美体验的电台广播聚合应用,打造一款属于中国人自己的广播应用。蜻蜓.fm全面收录中国大陆、港澳台地区、海外地区的广播电台,目前已与数百个电台、DJ合作,拥有的十三个分类、六大功能、三大特色,两种模式为广大广播迷朋友打造跨地域收听广播的完美体验。软件截图  软件支持通过定位功能、搜索、类型选择、地区选择,可以快速找到您想听的电台。支持跨地域收听,足不出户,听遍天下;也可在千里之外听乡音。支持触控、线控等多种收听模式。支持定时睡眠与闹钟功能。能在支持3G、WIFI网络环境下播放。支持后台播放。软件截图  软件有着详细的节目单和电台信息,能实时了解节目内容并制订收听计划。能与主播亲密接触,近距离互动;用户还能关注电台、节目的每日话题,更好的参与讨论,优秀评论会被主播选上节目。  二维码及使用方法:  注意到表格右侧像迷宫一样的图片了吗?它们就是“二维码”。  二维码是二维条形码的一种,可以将网址、文字、照片等信息通过相应的编码算法编译成为一个方块形条码图案,手机用户可以通过摄像头和解码软件将相关信息重新解码并查看内容。简单来说就是,如果您想要下载哪款限免软件,只需要拿出手机对准右侧二维码轻轻一拍,软件就会自动下载到您的手机上,省去了您点击链接查看的时间,十分方便。  但是想要使用此功能,还需在您的手机上安装一款二维码识别软件以获取二维码中的信息。安装完成后就可以拿出手机拍照下载了。  点击下载二维码应用  .cn/detail/19/18365.shtml  11月安卓推荐回顾SunMonTueWedThuFriSat2728293031123456789101112131415161718192021222324252627282930
11/25 13:4111/20 00:2411/14 07:4111/14 05:3710/29 09:0910/28 08:2910/24 00:38
暂无专家推荐本文
同时转发到我的微博
将自动提交到和讯看点,
请输入您的观点并提交。
请输入您的观点 168字以内
同时转发到我的微博置顶我的观点
科技精品推荐
每日要闻推荐
精彩焦点图鉴
  【免责声明】本文仅代表作者本人观点,与和讯网无关。和讯网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

我要回帖

更多关于 android手机收音机 的文章

 

随机推荐