打开相机后不调用 onActivityResult
onActivityResult not called after opening camera
所以我试图显示相机拍摄的图像并想稍后通过套接字发送它,但我注意到没有调用 onActivityResult() 方法,现在导致了更多问题。我正在使用 RESULT_OK,但会检查它的值,因此它不是负值。此外,在清单中,我没有限制任何内容。所以我(希望我)基本上检查了常见的错误,仍然无法自拔。
主要活动
public class MainActivity extends AppCompatActivity {
ImageView imageView;
Socket clientSocket = null;
byte[] byteFromImage;
Bitmap bitmap;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
try {
clientSocket = new Socket("192.168.178.41", 6066);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
final Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dispatchTakePictureIntent();
new Thread(new Runnable() {
@Override
public void run() {
try {
//mb outputstream
OutputStream output = clientSocket.getOutputStream();
output.write(byteFromImage);
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
} }); }
public void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode == RESULT_OK) {
Bitmap imageBitmap = (Bitmap) data.getExtras().get("data");
bitmap = imageBitmap;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap copy = bitmap;
//maybe jpg
copy.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteFromImage = stream.toByteArray();
imageView.setImageBitmap(imageBitmap);
}
}
public void print(String message) {
Log.e("My output: ",message);
}
}
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.education.client">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:name="android.hardware.camera"
android:required="true" />
<application
android:noHistory="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
感谢任何帮助!!
使用下面的代码从相机获取位图图像
if(data.getData()==null){
bitmap = (Bitmap)data.getExtras().get("data");
}else{
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
}
然后将这个位图转换为字节数组
我找到答案了!我不得不在 onActivityResult() 中重新初始化 ImageView :)
感谢@Sandeep dhiman !!
所以我试图显示相机拍摄的图像并想稍后通过套接字发送它,但我注意到没有调用 onActivityResult() 方法,现在导致了更多问题。我正在使用 RESULT_OK,但会检查它的值,因此它不是负值。此外,在清单中,我没有限制任何内容。所以我(希望我)基本上检查了常见的错误,仍然无法自拔。
主要活动
public class MainActivity extends AppCompatActivity {
ImageView imageView;
Socket clientSocket = null;
byte[] byteFromImage;
Bitmap bitmap;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
try {
clientSocket = new Socket("192.168.178.41", 6066);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
final Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dispatchTakePictureIntent();
new Thread(new Runnable() {
@Override
public void run() {
try {
//mb outputstream
OutputStream output = clientSocket.getOutputStream();
output.write(byteFromImage);
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
} }); }
public void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode == RESULT_OK) {
Bitmap imageBitmap = (Bitmap) data.getExtras().get("data");
bitmap = imageBitmap;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap copy = bitmap;
//maybe jpg
copy.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteFromImage = stream.toByteArray();
imageView.setImageBitmap(imageBitmap);
}
}
public void print(String message) {
Log.e("My output: ",message);
}
}
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.education.client">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:name="android.hardware.camera"
android:required="true" />
<application
android:noHistory="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
感谢任何帮助!!
使用下面的代码从相机获取位图图像
if(data.getData()==null){
bitmap = (Bitmap)data.getExtras().get("data");
}else{
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
}
然后将这个位图转换为字节数组
我找到答案了!我不得不在 onActivityResult() 中重新初始化 ImageView :) 感谢@Sandeep dhiman !!