Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 本机铃声管理器_React Native_Ringtonemanager - Fatal编程技术网

React native 本机铃声管理器

React native 本机铃声管理器,react-native,ringtonemanager,React Native,Ringtonemanager,我正在使用 但不幸的是,RingtoneManager.getRingtones(RingtoneManager.TYPE_ALL)总是返回“undefined” 我没有错,有人知道这个问题吗 我正在使用emulator,但我可以看到参数中存在铃声 编辑 我回到这个问题上来了 我不明白为什么它不起作用 我阅读并比较了经理的代码,没有发现任何问题 事实上,对象RingtoneManager本身被标记为未定义 编辑 这是我的代码: import React from 'react'; import

我正在使用

但不幸的是,RingtoneManager.getRingtones(RingtoneManager.TYPE_ALL)总是返回“undefined”

我没有错,有人知道这个问题吗

我正在使用emulator,但我可以看到参数中存在铃声

编辑

我回到这个问题上来了

我不明白为什么它不起作用

我阅读并比较了经理的代码,没有发现任何问题

事实上,对象RingtoneManager本身被标记为未定义

编辑

这是我的代码:

import React from 'react';
import { Text, View} from 'react-native';
import RingtoneManager from 'react-native-ringtone-manager';


export default class FormRingtones extends React.Component {

static navigationOptions = {
  title: 'Rings',
};
constructor(props) {
super(props);

}
rings;

componentDidMount() {
this.getRings();
}

getRings() {
console.log("1 : " + RingtoneManager);
 this.rings =  RingtoneManager.getRingtones(RingtoneManager.TYPE_ALL);
 if(this.rings != null) {this.rings = this.rings.map((item,index) =>{<Text>{item.title}</Text>})};
   console.log("2 " + this.rings.length);

}

render() {   
return (
  <View>
    <View >
      {this.rings}
    </View>
  </View>
)
};
}
现在,一切正常,我可以按类型列出铃声,播放它们的声音,等等

这是我有生以来第一次安装我必须在之后再写的东西:)

编辑

这就是我如何调用RNRingtoneManagerModule的方法:

getRingtones(type) {
RingtoneManager.getRingsByType(type, (data) => {
  this.setState({ selected: type, datas: data, selectedItem: data[0] });
});
}

其中ItemRingtone只是每个项目的一个视图。

此外,我发布了我的全部代码。它还没有完全完成,自从我解决了RingToneManager的主要问题后,我就一直在开发我的应用程序的其他部分。但对于那些遇到手机铃声问题的人来说,这是一个良好的开端:

RNRingtoneManagerModule

package com.reactlibrary;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.media.RingtoneManager;
import android.net.Uri;
import android.provider.MediaStore;
import android.database.Cursor;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.Arguments;

import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.annotation.SuppressLint;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;

import java.net.URISyntaxException;

public class RNRingtoneManagerModule extends ReactContextBaseJavaModule {

private final ReactApplicationContext reactContext;
private static final String TYPE_ALARM_KEY = "TYPE_ALARM";
private static final String TYPE_ALL_KEY = "TYPE_ALL";
private static final String TYPE_NOTIFICATION_KEY = "TYPE_NOTIFICATION";
private static final String TYPE_RINGTONE_KEY = "TYPE_RINGTONE";

final static class SettingsKeys {
    public static final String URI = "uri";
    public static final String TITLE = "title";
    public static final String ARTIST = "artist";
    public static final String SIZE = "size";
    public static final String MIME_TYPE = "mimeType";
    public static final String DURATION = "duration";
    public static final String RINGTONE_TYPE = "ringtoneType";
}

public RNRingtoneManagerModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
}

@Override
public String getName() {
    return "RingtoneManager";
}

@ReactMethod
public void getRingtones(Callback successCallback) {
    getRingsByType(RingtoneManager.TYPE_ALL, successCallback);
}

@ReactMethod
public void getRingsByType(int ringtoneType, Callback successCallback) {
    RingtoneManager manager = new RingtoneManager(this.reactContext);
    manager.setType(ringtoneType);
    Cursor cursor = manager.getCursor();

    WritableArray result = Arguments.createArray();
    int key= 0;
    while (cursor.moveToNext()) { 
        WritableMap data = Arguments.createMap();
        String notificationTitle = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX);
        Uri notificationUri = Uri.parse(cursor.getString(RingtoneManager.URI_COLUMN_INDEX) + "/"
                + cursor.getString(RingtoneManager.ID_COLUMN_INDEX));
        String notification = getPathFromUri(this.reactContext, notificationUri);
        data.putInt("key", key);
        data.putString("title", notificationTitle);
        data.putString("uri", notification);
        result.pushMap(data);
        key=key+1;
    }
    successCallback.invoke(result);
}

@SuppressLint("NewApi")
public String getPathFromUri(Context context, Uri uri) {
    final boolean needToCheckUri = Build.VERSION.SDK_INT >= 19;
    String selection = null;
    String[] selectionArgs = null;
    // Uri is different in versions after KITKAT (Android 4.4), we need to
    // deal with different Uris.
    if (needToCheckUri && DocumentsContract.isDocumentUri(context.getApplicationContext(), uri)) {
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            return Environment.getExternalStorageDirectory() + "/" + split[1];
        } else if (isDownloadsDocument(uri)) {
            final String id = DocumentsContract.getDocumentId(uri);
            uri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
        } else if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];
            if ("image".equals(type)) {
                uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }
            selection = "_id=?";
            selectionArgs = new String[] { split[1] };
        }
    }
    if ("content".equalsIgnoreCase(uri.getScheme())) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = null;
        try {
            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            if (cursor.moveToFirst()) {
                return cursor.getString(column_index);
            }
        } catch (Exception e) {
        }
    } else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }
    return null;
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is ExternalStorageProvider.
 */
public static boolean isExternalStorageDocument(Uri uri) {
    return "com.android.externalstorage.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is DownloadsProvider.
 */
public static boolean isDownloadsDocument(Uri uri) {
    return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is MediaProvider.
 */
public static boolean isMediaDocument(Uri uri) {
    return "com.android.providers.media.documents".equals(uri.getAuthority());
}

@ReactMethod
public void createRingtone(ReadableMap settings) {
    String uriStr = settings.getString(SettingsKeys.URI);
    File ringtone = new File(uriStr);
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, ringtone.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, settings.getString(SettingsKeys.TITLE));
    values.put(MediaStore.MediaColumns.SIZE, settings.getInt(SettingsKeys.SIZE));
    values.put(MediaStore.MediaColumns.MIME_TYPE, settings.getString(SettingsKeys.MIME_TYPE));
    values.put(MediaStore.Audio.Media.ARTIST, settings.getString(SettingsKeys.ARTIST));
    values.put(MediaStore.Audio.Media.DURATION, settings.getInt(SettingsKeys.DURATION));
    int ringtoneType = settings.getInt(SettingsKeys.RINGTONE_TYPE);
    values.put(MediaStore.Audio.Media.IS_RINGTONE, isRingtoneType(ringtoneType, RingtoneManager.TYPE_RINGTONE));
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION,
            isRingtoneType(ringtoneType, RingtoneManager.TYPE_NOTIFICATION));
    values.put(MediaStore.Audio.Media.IS_ALARM, isRingtoneType(ringtoneType, RingtoneManager.TYPE_ALARM));
    values.put(MediaStore.Audio.Media.IS_MUSIC, false);
    if (ringtone.exists() && getCurrentActivity() != null) {
        ContentResolver contentResolver = getCurrentActivity().getContentResolver();
        Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtone.getAbsolutePath());
        contentResolver.insert(uri, values);
    }
}

@ReactMethod
public void setRingtone(String uri) {

}

@ReactMethod
public void pickRingtone() {

}

@Override
public Map<String, Object> getConstants() {
    final Map<String, Object> constants = new HashMap<>();
    constants.put(TYPE_ALARM_KEY, RingtoneManager.TYPE_ALARM);
    constants.put(TYPE_ALL_KEY, RingtoneManager.TYPE_ALL);
    constants.put(TYPE_NOTIFICATION_KEY, RingtoneManager.TYPE_NOTIFICATION);
    constants.put(TYPE_RINGTONE_KEY, RingtoneManager.TYPE_RINGTONE);
    return constants;
}

/**
 * Returns true when the given ringtone type matches the ringtone to compare.
 * Will default to true if the given ringtone type is RingtoneManager.TYPE_ALL.
 * 
 * @param ringtoneType          ringtone type given
 * @param ringtoneTypeToCompare ringtone type to compare to
 * @return true if the type matches or is TYPE_ALL
 */
private boolean isRingtoneType(int ringtoneType, int ringtoneTypeToCompare) {
    return ringtoneTypeToCompare == ringtoneType || RingtoneManager.TYPE_ALL == ringtoneType;
}
}
package.com.library;
导入android.content.ContentResolver;
导入android.content.ContentValues;
导入android.media.ringtonemager;
导入android.net.Uri;
导入android.provider.MediaStore;
导入android.database.Cursor;
导入com.facebook.react.bridge.ReactApplicationContext;
导入com.facebook.react.bridge.ReactContextBaseJavaModule;
导入com.facebook.react.bridge.ReactMethod;
导入com.facebook.react.bridge.Callback;
导入com.facebook.react.bridge.ReadableMap;
导入com.facebook.react.bridge.WritableMap;
导入com.facebook.react.bridge.WritableArray;
导入com.facebook.react.bridge.Arguments;
导入java.io.File;
导入java.util.array;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入android.annotation.SuppressLint;
导入android.content.ContentUris;
导入android.content.Context;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Build;
导入android.os.Environment;
导入android.provider.documents合同;
导入android.provider.MediaStore;
导入java.net.URISyntaxException;
公共类RNRingtoneManagerModule扩展了ReactContextBaseJavaModule{
私有最终ReactApplicationContext reactContext;
私有静态最终字符串TYPE\u ALARM\u KEY=“TYPE\u ALARM”;
私有静态最终字符串TYPE\u ALL\u KEY=“TYPE\u ALL”;
私有静态最终字符串TYPE\u NOTIFICATION\u KEY=“TYPE\u NOTIFICATION”;
专用静态最终字符串类型\u RINGTONE\u KEY=“类型\u RINGTONE”;
最终静态类设置{
公共静态最终字符串URI=“URI”;
公共静态最终字符串TITLE=“TITLE”;
公共静态最终字符串艺术家=“艺术家”;
公共静态最终字符串SIZE=“SIZE”;
公共静态最终字符串MIME\u TYPE=“mimeType”;
公共静态最终字符串DURATION=“DURATION”;
公共静态最终字符串铃声\u TYPE=“ringtoneType”;
}
公用RNRingtoneManagerModule(ReactApplicationContext reactContext){
超级(反应上下文);
this.reactContext=reactContext;
}
@凌驾
公共字符串getName(){
返回“铃声管理器”;
}
@反应法
公用无效getRingtones(回调成功回调){
getRingsByType(RingtoneManager.TYPE_ALL,successCallback);
}
@反应法
public void getRingsByType(int-ringtoneType,回调成功回调){
RingtoneManager管理器=新的RingtoneManager(this.reactContext);
manager.setType(ringtoneType);
Cursor=manager.getCursor();
WritableArray结果=Arguments.createArray();
int键=0;
while(cursor.moveToNext()){
WritableMap数据=Arguments.createMap();
String notificationTitle=cursor.getString(RingtoneManager.TITLE\u COLUMN\u INDEX);
Uri notificationUri=Uri.parse(cursor.getString(ringtonemager.Uri\u COLUMN\u INDEX)+“/”
+getString(ringtonemager.ID_COLUMN_INDEX));
字符串通知=getPathFromUri(this.reactContext,notificationUri);
数据输入(“键”,键);
data.putString(“title”,notificationTitle);
data.putString(“uri”,通知);
结果:pushMap(数据);
键=键+1;
}
successCallback.invoke(结果);
}
@SuppressLint(“新API”)
公共字符串getPathFromUri(上下文,Uri){
最终布尔值needToCheckUri=Build.VERSION.SDK_INT>=19;
字符串选择=null;
字符串[]selectionArgs=null;
//Uri在KITKAT(Android 4.4)之后的版本中是不同的,我们需要
//处理不同的URI。
if(needToCheckUri&&documentscocontract.isDocumentUri(context.getApplicationContext(),uri)){
if(isExternalStorageDocument(uri)){
最终字符串docId=DocumentsContract.getDocumentId(uri);
最终字符串[]split=docId.split(“:”);
返回Environment.getExternalStorageDirectory()+“/”+split[1];
}else if(isDownloadsDocument(uri)){
最终字符串id=DocumentsContract.getDocumentId(uri);
uri=ContentUris.withAppendedId(uri.parse(“content://downloads/public_downloads),长。价值(id));
}else if(isMediaDocument(uri)){
最终字符串docId=DocumentsContract.getDocumentId(uri);
最终字符串[]split=docId.split(“:”);
最终字符串类型=拆分[0];
如果(“图像”。等于(类型)){
uri=MediaStore.Images.Media.EXTERNAL\u CONTENT\u uri;
}else if(“视频”。等于(类型)){
uri=MediaStore.Video.Media.EXTERNAL\u CONTENT\u uri;
}else if(“音频”。等于(类型)){
uri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u uri;
}
selection=“_id=?”;
selectionArgs=新字符串[]{split[1]};
}
}
if(“content.equalsIgnoreCase(uri.getScheme())){
字符串[]pro
package com.reactlibrary;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.media.RingtoneManager;
import android.net.Uri;
import android.provider.MediaStore;
import android.database.Cursor;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.Arguments;

import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.annotation.SuppressLint;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;

import java.net.URISyntaxException;

public class RNRingtoneManagerModule extends ReactContextBaseJavaModule {

private final ReactApplicationContext reactContext;
private static final String TYPE_ALARM_KEY = "TYPE_ALARM";
private static final String TYPE_ALL_KEY = "TYPE_ALL";
private static final String TYPE_NOTIFICATION_KEY = "TYPE_NOTIFICATION";
private static final String TYPE_RINGTONE_KEY = "TYPE_RINGTONE";

final static class SettingsKeys {
    public static final String URI = "uri";
    public static final String TITLE = "title";
    public static final String ARTIST = "artist";
    public static final String SIZE = "size";
    public static final String MIME_TYPE = "mimeType";
    public static final String DURATION = "duration";
    public static final String RINGTONE_TYPE = "ringtoneType";
}

public RNRingtoneManagerModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
}

@Override
public String getName() {
    return "RingtoneManager";
}

@ReactMethod
public void getRingtones(Callback successCallback) {
    getRingsByType(RingtoneManager.TYPE_ALL, successCallback);
}

@ReactMethod
public void getRingsByType(int ringtoneType, Callback successCallback) {
    RingtoneManager manager = new RingtoneManager(this.reactContext);
    manager.setType(ringtoneType);
    Cursor cursor = manager.getCursor();

    WritableArray result = Arguments.createArray();
    int key= 0;
    while (cursor.moveToNext()) { 
        WritableMap data = Arguments.createMap();
        String notificationTitle = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX);
        Uri notificationUri = Uri.parse(cursor.getString(RingtoneManager.URI_COLUMN_INDEX) + "/"
                + cursor.getString(RingtoneManager.ID_COLUMN_INDEX));
        String notification = getPathFromUri(this.reactContext, notificationUri);
        data.putInt("key", key);
        data.putString("title", notificationTitle);
        data.putString("uri", notification);
        result.pushMap(data);
        key=key+1;
    }
    successCallback.invoke(result);
}

@SuppressLint("NewApi")
public String getPathFromUri(Context context, Uri uri) {
    final boolean needToCheckUri = Build.VERSION.SDK_INT >= 19;
    String selection = null;
    String[] selectionArgs = null;
    // Uri is different in versions after KITKAT (Android 4.4), we need to
    // deal with different Uris.
    if (needToCheckUri && DocumentsContract.isDocumentUri(context.getApplicationContext(), uri)) {
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            return Environment.getExternalStorageDirectory() + "/" + split[1];
        } else if (isDownloadsDocument(uri)) {
            final String id = DocumentsContract.getDocumentId(uri);
            uri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
        } else if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];
            if ("image".equals(type)) {
                uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }
            selection = "_id=?";
            selectionArgs = new String[] { split[1] };
        }
    }
    if ("content".equalsIgnoreCase(uri.getScheme())) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = null;
        try {
            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            if (cursor.moveToFirst()) {
                return cursor.getString(column_index);
            }
        } catch (Exception e) {
        }
    } else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }
    return null;
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is ExternalStorageProvider.
 */
public static boolean isExternalStorageDocument(Uri uri) {
    return "com.android.externalstorage.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is DownloadsProvider.
 */
public static boolean isDownloadsDocument(Uri uri) {
    return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is MediaProvider.
 */
public static boolean isMediaDocument(Uri uri) {
    return "com.android.providers.media.documents".equals(uri.getAuthority());
}

@ReactMethod
public void createRingtone(ReadableMap settings) {
    String uriStr = settings.getString(SettingsKeys.URI);
    File ringtone = new File(uriStr);
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, ringtone.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, settings.getString(SettingsKeys.TITLE));
    values.put(MediaStore.MediaColumns.SIZE, settings.getInt(SettingsKeys.SIZE));
    values.put(MediaStore.MediaColumns.MIME_TYPE, settings.getString(SettingsKeys.MIME_TYPE));
    values.put(MediaStore.Audio.Media.ARTIST, settings.getString(SettingsKeys.ARTIST));
    values.put(MediaStore.Audio.Media.DURATION, settings.getInt(SettingsKeys.DURATION));
    int ringtoneType = settings.getInt(SettingsKeys.RINGTONE_TYPE);
    values.put(MediaStore.Audio.Media.IS_RINGTONE, isRingtoneType(ringtoneType, RingtoneManager.TYPE_RINGTONE));
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION,
            isRingtoneType(ringtoneType, RingtoneManager.TYPE_NOTIFICATION));
    values.put(MediaStore.Audio.Media.IS_ALARM, isRingtoneType(ringtoneType, RingtoneManager.TYPE_ALARM));
    values.put(MediaStore.Audio.Media.IS_MUSIC, false);
    if (ringtone.exists() && getCurrentActivity() != null) {
        ContentResolver contentResolver = getCurrentActivity().getContentResolver();
        Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtone.getAbsolutePath());
        contentResolver.insert(uri, values);
    }
}

@ReactMethod
public void setRingtone(String uri) {

}

@ReactMethod
public void pickRingtone() {

}

@Override
public Map<String, Object> getConstants() {
    final Map<String, Object> constants = new HashMap<>();
    constants.put(TYPE_ALARM_KEY, RingtoneManager.TYPE_ALARM);
    constants.put(TYPE_ALL_KEY, RingtoneManager.TYPE_ALL);
    constants.put(TYPE_NOTIFICATION_KEY, RingtoneManager.TYPE_NOTIFICATION);
    constants.put(TYPE_RINGTONE_KEY, RingtoneManager.TYPE_RINGTONE);
    return constants;
}

/**
 * Returns true when the given ringtone type matches the ringtone to compare.
 * Will default to true if the given ringtone type is RingtoneManager.TYPE_ALL.
 * 
 * @param ringtoneType          ringtone type given
 * @param ringtoneTypeToCompare ringtone type to compare to
 * @return true if the type matches or is TYPE_ALL
 */
private boolean isRingtoneType(int ringtoneType, int ringtoneTypeToCompare) {
    return ringtoneTypeToCompare == ringtoneType || RingtoneManager.TYPE_ALL == ringtoneType;
}
}
import React from 'react';
import { Text, Button, TouchableOpacity, FlatList, View, ScrollView, StyleSheet,   TouchableHighlight } from 'react-native';
import RingtoneManager from 'react-native-ringtone-manager';
import FontAwesome5 from 'react-native-vector-icons/FontAwesome5';
import Slider from 'react-native-slider';
import Sound from 'react-native-sound';
/*
Param   Type    Description
uri     String  The full file path to the ringtone on the file system.
title   String  The title of the ringtone. Will appear in the picker with this title.
artist  String  The artist of the ringtone.
size    Integer     The size of the ringtone file.
mimeType    String  The mime type of the ringtone, for example: audio/mp3
duration    Integer     The duration of the ringtone in seconds.
ringtoneType    RINGTONE_TYPE   The ringtone type: TYPE_ALL, TYPE_RINGTONE,   TYPE_NOTIFICATION, TYPE_ALARM
*/
class MyListItem extends React.PureComponent {
_onPress = () => {
this.props.onPressItem(this.props.datas);
};


render() {
console.log("this.props.uri " + this.props.uri + "this.props.selected " + this.props.selected)
const textColor = this.props.uri === this.props.selected ? 'black' : 'white';
const backgroundColor = this.props.uri === this.props.selected ? 'orange' : '#444444';

return (
  <TouchableOpacity onPress={this._onPress}>
    <View style={{
      backgroundColor: backgroundColor, borderRadius: 14, paddingHorizontal: 10, paddingVertical: 4,marginBottom:4, shadowColor: "#000",
      shadowOffset: {
        width: 0,
        height: 9,
      },
      shadowOpacity: 0.48,
      shadowRadius: 11.95,

      elevation: 18,
    }}>
      <Text style={{ fontSize: 16, color: textColor }}>{this.props.title}</Text>
      <Text style={{ fontSize: 16, color: textColor }}>{this.props.duration}    </Text>
    </View>
  </TouchableOpacity>
 );
 }
}