android - unity - ¿Cómo hacer clic en el evento de cámara con la ayuda del receptor de difusión?
unity move camera with touch (1)
No quiero hacer ninguna aplicación. Solo quiero que cuando haga clic en la aplicación de cámara predeterminada (se adjunte la captura de pantalla), normalmente abra la cámara. Luego, cuando haga clic en el botón para hacer clic en la imagen, solo quiero mostrar A Toast. Para esto probé algo. Solo traté de recibir el intento de transmisión. El código es el siguiente. Pero no estoy recibiendo el brindis. Por favor, ayúdame.
MainActivity.java
public class MainActivity extends Activity {
CameraReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent("com.android.camera.NEW_PICTURE");
CameraReceiver myReceiver = new CameraReceiver();
sendBroadcast(intent);
}
private class CameraReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
abortBroadcast();
Log.d("New Photo Clicked", ">");
Cursor cursor = context.getContentResolver().query(
intent.getData(), null, null, null, null);
cursor.moveToFirst();
String image_path = cursor
.getString(cursor.getColumnIndex("_data"));
Toast.makeText(getApplicationContext(), "New Photo is Saved as : " + image_path,
1000).show();
}
}
@Override
public void onStart() {
super.onStart();
myReceiver = new CameraReceiver();
IntentFilter i = new IntentFilter("android.intent.action.CAMERA_BUTTON");
registerReceiver(myReceiver, i);
}
@Override
public void onResume() {
IntentFilter i = new IntentFilter("android.intent.action.CAMERA_BUTTON");
registerReceiver(myReceiver, i);
super.onResume();
}
@Override
public void onPause() {
unregisterReceiver(myReceiver);
super.onPause();
}
}
AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.defaultcamers.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".CameraReceiver"
android:enabled="true" >
<intent-filter android:priority="10000">
<action android:name="android.intent.action.CAMERA_BUTTON" />
<action android:name="com.android.camera.NEW_PICTURE" />
<action android:name="android.hardware.action.NEW_PICTURE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</receiver>
<class android:name=".CameraReceiver" >
</class>
</application>
Ahora, cuando abro la cámara y trato de hacer clic en la imagen, obtengo "Excaption ClassNotFound" en "CameraReceiver.java".
Resolví la ClassNotFoundException al hacer que la clase CameraReceiver fuera pública. Implementé su código en mi proyecto de Android, y obtuve la ClassNotFoundException pero lo resolví ahora. Simplemente cambie su clase de la siguiente manera y también cambie el primer parámetro de Toast como lo hice en el siguiente código.
public class CameraReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
abortBroadcast();
Log.d("New Photo Clicked", ">");
Cursor cursor = context.getContentResolver().query(
intent.getData(), null, null, null, null);
cursor.moveToFirst();
String image_path = cursor
.getString(cursor.getColumnIndex("_data"));
Toast.makeText(context, "New Photo is Saved as : " + image_path,
1000).show();
}
}
y debería funcionar, me funciona, cuando tomo una foto de la cámara. Elimine la clase de MainActivity y cree una clase pública de CameraReceiver para el código anterior.