Javascript 如何修复SMS检索器API
我编写了一些代码,例如“SMS Retreiver API” 但我不会得到我不会得到的结果 此代码将传递给MainActivityJavascript 如何修复SMS检索器API,javascript,android,api,android-studio,Javascript,Android,Api,Android Studio,我编写了一些代码,例如“SMS Retreiver API” 但我不会得到我不会得到的结果 此代码将传递给MainActivity SmsRetrieverClient client = SmsRetriever.getClient(this); Task<Void> task = client.startSmsRetriever(); task.addOnSuccessListener(new OnSuccessLis
SmsRetrieverClient client = SmsRetriever.getClient(this);
Task<Void> task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
在我的舱单上
<receiver android:name="ru.project.MBank.MySMSBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>
但结果一无所获。
我做错了什么?我也有同样的问题。首先,您需要生成一个唯一的密钥(应用程序签名),用于标识消息和您的设备。生成密钥后,播音员将能够检测消息
public class AppSignature extends ContextWrapper {
public static final String TAG = AppSignature.class.getSimpleName();
private static final String HASH_TYPE = "SHA-256";
public static final int NUM_HASHED_BYTES = 9;
public static final int NUM_BASE64_CHAR = 11;
public AppSignature(Context context) {
super(context);
}
/**
* Get all the app signatures for the current package
* @return
*/
public ArrayList<String> getAppSignatures() {
ArrayList<String> appCodes = new ArrayList<>();
try {
// Get all package signatures for the current package
String packageName = getPackageName();
PackageManager packageManager = getPackageManager();
Signature[] signatures = packageManager.getPackageInfo(packageName,
PackageManager.GET_SIGNATURES).signatures;
// For each signature create a compatible hash
for (Signature signature : signatures) {
String hash = hash(packageName, signature.toCharsString());
if (hash != null) {
appCodes.add(String.format("%s", hash));
}
}
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Unable to find package to obtain hash.", e);
}
return appCodes;
}
private static String hash(String packageName, String signature) {
String appInfo = packageName + " " + signature;
try {
MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);
messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
byte[] hashSignature = messageDigest.digest();
// truncated into NUM_HASHED_BYTES
hashSignature = Arrays.copyOfRange(hashSignature, 0, NUM_HASHED_BYTES);
// encode into Base64
String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);
base64Hash = base64Hash.substring(0, NUM_BASE64_CHAR);
return base64Hash;
} catch (NoSuchAlgorithmException e) {
}
return null;
}
公共类AppSignature扩展了ContextWrapper{
公共静态最终字符串标记=AppSignature.class.getSimpleName();
私有静态最终字符串哈希_TYPE=“SHA-256”;
公共静态final int NUM_HASHED_BYTES=9;
公共静态最终int NUM_BASE64_CHAR=11;
公共AppSignature(上下文){
超级(上下文);
}
/**
*获取当前包的所有应用程序签名
*@返回
*/
公共ArrayList getAppSignatures(){
ArrayList appCodes=新的ArrayList();
试一试{
//获取当前包的所有包签名
字符串packageName=getPackageName();
PackageManager PackageManager=getPackageManager();
Signature[]signatures=packageManager.getPackageInfo(packageName,
PackageManager.GET_签名)。签名;
//为每个签名创建一个兼容的哈希
用于(签名:签名){
String hash=hash(packageName,signature.tocharstring());
if(散列!=null){
add(String.format(“%s”,散列));
}
}
}捕获(PackageManager.NameNotFounde异常){
Log.e(标记“无法找到获取哈希的包”,e);
}
返回应用程序代码;
}
私有静态字符串哈希(字符串packageName、字符串签名){
字符串appInfo=packageName+“”+签名;
试一试{
MessageDigest=MessageDigest.getInstance(哈希类型);
update(appInfo.getBytes(StandardCharsets.UTF_8));
字节[]hashSignature=messageDigest.digest();
//截断为NUM_散列字节
hashSignature=Arrays.copyOfRange(hashSignature,0,NUM\u散列字节);
//编码成Base64
字符串base64Hash=Base64.encodeToString(hashSignature,Base64.NO_PADDING | Base64.NO_WRAP);
base64Hash=base64Hash.substring(0,NUM\u BASE64\u CHAR);
返回base64Hash;
}捕获(无算法异常){
}
返回null;
}
}
在这之后,在你的第一次活动中开始这门课。
希望这对你有帮助。你能帮我吗?在MainActivity中,此代码在何处过期?我试过了,但没有成功。创建单独的类AppSignature并将此代码粘贴到该类。在你的主要活动之后创建这个类的对象。你好!帮帮我,我无法解析短信检索器。你在应用程序中添加依赖项了吗?如果尚未添加依赖项,请添加实现“com.google.android.gms:play services auth:16.0.1”
public class AppSignature extends ContextWrapper {
public static final String TAG = AppSignature.class.getSimpleName();
private static final String HASH_TYPE = "SHA-256";
public static final int NUM_HASHED_BYTES = 9;
public static final int NUM_BASE64_CHAR = 11;
public AppSignature(Context context) {
super(context);
}
/**
* Get all the app signatures for the current package
* @return
*/
public ArrayList<String> getAppSignatures() {
ArrayList<String> appCodes = new ArrayList<>();
try {
// Get all package signatures for the current package
String packageName = getPackageName();
PackageManager packageManager = getPackageManager();
Signature[] signatures = packageManager.getPackageInfo(packageName,
PackageManager.GET_SIGNATURES).signatures;
// For each signature create a compatible hash
for (Signature signature : signatures) {
String hash = hash(packageName, signature.toCharsString());
if (hash != null) {
appCodes.add(String.format("%s", hash));
}
}
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Unable to find package to obtain hash.", e);
}
return appCodes;
}
private static String hash(String packageName, String signature) {
String appInfo = packageName + " " + signature;
try {
MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);
messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
byte[] hashSignature = messageDigest.digest();
// truncated into NUM_HASHED_BYTES
hashSignature = Arrays.copyOfRange(hashSignature, 0, NUM_HASHED_BYTES);
// encode into Base64
String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);
base64Hash = base64Hash.substring(0, NUM_BASE64_CHAR);
return base64Hash;
} catch (NoSuchAlgorithmException e) {
}
return null;
}