मेरे पास एक विजेट के साथ एक फ्लैशलाइट ऐप है। विजेट का उपयोग फ्लैशलाइट को चालू और बंद करने के लिए किया जाता है और मुख्य गतिविधि या कुछ भी प्रदर्शित नहीं करता है। कुछ घंटों के बाद, विजेट कुछ भी नहीं करता है। मेरा मतलब है कि अगर आप इसे क्लिक करते हैं, तो कुछ भी नहीं होता है। मेरे पास Provider
और Receiver
को पूरा करने के लिए दो कक्षा हैं।एंड्रॉइड विजेट थोड़ी देर के बाद काम करना बंद कर देता है?
Provider:
public class WidgetProvider extends AppWidgetProvider {
@
Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Intent receiver = new Intent(context, FlashlightWidgetReceiver.class);
receiver.setAction("COM_FLASHLIGHT");
receiver.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, receiver, 0);
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.appwidget_layout);
views.setOnClickPendingIntent(R.id.imageButton, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, views);
}
}
Receiver:
public class FlashlightWidgetReceiver extends BroadcastReceiver {
private static boolean isLightOn = false;
private static Camera camera;
MediaPlayer mp;@
Override
public void onReceive(Context context, Intent intent) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_layout);
if (isLightOn) {
views.setImageViewResource(R.id.imageButton, R.drawable.btn_switch_off);
mp = MediaPlayer.create(context, R.raw.light_switch_off);
} else {
views.setImageViewResource(R.id.imageButton, R.drawable.btn_switch_on);
mp = MediaPlayer.create(context, R.raw.light_switch_on);
}
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@
Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
mp.start();
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(new ComponentName(context, WidgetProvider.class),
views);
if (isLightOn) {
if (camera != null) {
camera.stopPreview();
camera.release();
camera = null;
isLightOn = false;
}
} else {
camera = Camera.open();
if (camera == null) {
Toast.makeText(context, "No Camera!", Toast.LENGTH_SHORT).show();
} else {
Camera.Parameters param = camera.getParameters();
param.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
try {
camera.setParameters(param);
camera.startPreview();
isLightOn = true;
} catch (Exception e) {
Toast.makeText(context, "No Flash!", Toast.LENGTH_SHORT).show();
}
}
}
}
}
Setup:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minHeight="40dp"
android:maxWidth="40dp"
android:maxHeight="40dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/appwidget_layout"
android:resizeMode="horizontal|vertical">
</appwidget-provider>
अद्यतन: अद्यतन अंतराल को कम करना विजेट अधिक बार ताज़ा इसलिए यदि यह यह 30 मिनट के बाद फिर से काम करता है और उसे फिर से कुछ समय फ्रीज हो सकता है अटक रहा है बनाता है।
अद्यतन 2: दिनांक बदलना तुरंत ताज़ा होने तक विजेट को फ्रीज करता है।
अद्यतन 3: किसी भी तरह से लॉन्चर को पुनरारंभ करने की तिथि बदलना और जब भी लॉन्चर को पुनरारंभ किया जाता है तो विजेट 30 मिनट तक फ्रीज हो जाता है। इस पोस्ट के लिए
यह परिवर्तन समस्या का समाधान क्यों करता है? – Alireza
विजेट के लिए श्रोता को ताज़ा करता है। –
हाय मोहम्मद, मुझे पता है कि 2 साल से पोस्ट, लेकिन यदि आप मुझे परिवर्तन के बाद कोड प्रदान कर सकते हैं, या कम से कम मुझे बताएं कि आप कहां कॉल करते हैं फ्लैश? मैं बहुत आभारी रहूंगा। मैं ऐप विजेट बनाने की कोशिश कर रहा हूं लेकिन मैं अभी भी पूरी तरह से समझ नहीं पा रहा हूं कि यह कैसे काम कर रहा है, इसलिए मुझे उम्मीद है कि आप मेरी मदद करेंगे – Tefa