Android和Javascript-从两个功能到一个
MainActivity.javaAndroid和Javascript-从两个功能到一个,javascript,android,android-gallery,Javascript,Android,Android Gallery,MainActivity.java public String URI = null; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 0 && resultCode == RESUL
public String URI = null;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == RESULT_OK)
{
Uri pickedImage = data.getData();
URI = pickedImage.toString();
}
}
public String GetURI()
{
return URI;
}
WebAppInterface.java
@JavascriptInterface
public void GetPicture()
{
Intent galleryIntent = new Intent(Intent.ACTION_PICK);
galleryIntent.setType("image/*");
((MainActivity) mContext).startActivityForResult(galleryIntent, 0);
}
@JavascriptInterface
public String GetURI()
{
return getRealPathFromURI(mContext, Uri.parse(((MainActivity) mContext).GetURI()));
}
我正在使用以下Javascript函数
function GetPicture()
{
Android.GetPicture();
}
function loadImage()
{
document.getElementById("img").src = Android.GetURI();
}
第一个用于获取图片并将完整路径存储在字符串中。第二个函数用于从字符串获取完整路径
目前这是可行的,因为我首先调用GetPicture,然后调用loadImage。
但是我想合并这些函数。
因此Javascript应该是:
function loadImage()
{
document.getElementById("img").src = Android.GetPicture();
}
因此,我将代码从WebAppInterface.java更改为:
@JavascriptInterface
public String GetPicture()
{
Intent galleryIntent = new Intent(Intent.ACTION_PICK);
galleryIntent.setType("image/*");
((MainActivity) mContext).startActivityForResult(galleryIntent, 0);
return ((MainActivity) mContext).GetURI();
}
但它不起作用。我想我知道为什么,因为GetURI是在设置字符串URI之前被调用的
那么我该如何解决这个问题呢
如果有人知道一个更好的标题,请告诉我。好的,我想我找到了一个解决方案,但我不知道这是否是最好的方法。 因此,对于那些想知道我是如何修复它的人: 我更改了GetPicture方法
@JavascriptInterface
public String GetPicture()
{
Intent galleryIntent = new Intent(Intent.ACTION_PICK);
galleryIntent.setType("image/*");
((MainActivity) mContext).startActivityForResult(galleryIntent, 0);
while(((MainActivity) mContext).IsFinished == false){}
return ((MainActivity) mContext).GetURI();
}
在MainActivity.java中,我添加了一个名为IsFinished的公共布尔值,将其设置为false,当用户在ActivityResult上拾取图像时,它将为true
因此,代码将是:
public String URI = null;
public boolean IsFinished = false;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == RESULT_OK)
{
Uri pickedImage = data.getData();
URI = pickedImage.toString();
IsFinished = true;
}
}
public String GetURI()
{
return URI;
}