Главная страница

практическая часть диплома мобильных приложений. Диплом_2 глава. 2. Разработка Программного продукта. 1 Концепция приложения


Скачать 0.63 Mb.
Название2. Разработка Программного продукта. 1 Концепция приложения
Анкорпрактическая часть диплома мобильных приложений
Дата07.05.2023
Размер0.63 Mb.
Формат файлаdocx
Имя файлаДиплом_2 глава.docx
ТипДокументы
#1112793
страница6 из 6
1   2   3   4   5   6

Приложение 2

Листинг программы


ublic class DemoActivity extends Activity {

public static final String EXTRA_MESSAGE = "message";

public static final String PROPERTY_REG_ID = "registration_id";

private static final String PROPERTY_APP_VERSION = "appVersion";

private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;

/**

* Substitute you own sender ID here. This is the project number you got

* from the API Console, as described in "Getting Started."

*/

String SENDER_ID = "887029561167";

/**

* Tag used on log messages.

*/

static final String TAG = "GCM Demo";

TextView mDisplay;

GoogleCloudMessaging gcm;

AtomicInteger msgId = new AtomicInteger();

Context context;

String regid;

private ArrayAdapter mNotificationAdapter;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mDisplay = (TextView) findViewById(R.id.display);

context = getApplicationContext();

// Check device for Play Services APK. If check succeeds, proceed with GCM registration.

if (checkPlayServices()) {

gcm = GoogleCloudMessaging.getInstance(this);

regid = getRegistrationId(context);

if (regid.isEmpty()) {

registerInBackground();

}

} else {

Log.i(TAG, "No valid Google Play Services APK found.");

}

List
persons = Person.listAll(Person.class);

ArrayList notifications= new ArrayList<>();

// Copied

for (int i = persons.size()-1; i >= 0; --i){

notifications.add(persons.get(i).name+" detected on "+persons.get(i).time);

}

/*String [] notificationArray = {

"This ", "is", "a", "Dynamic", "List", "to", "display", "notifications",

"for", "the", " Application"

};

List notifications= new ArrayList(

Arrays.asList(notificationArray));*/

mNotificationAdapter= new ArrayAdapter(

this,

R.layout.list_item_notifications,

R.id.list_item_notifications_textview,

notifications

);

ListView listView= (ListView) findViewById(R.id.listview_notifications);

listView.setAdapter(mNotificationAdapter);

}

@Override

protected void onResume() {

super.onResume();

// Check device for Play Services APK.

checkPlayServices();

}

/**

* Check the device to make sure it has the Google Play Services APK. If

* it doesn't, display a dialog that allows users to download the APK from

* the Google Play Store or enable it in the device's system settings.

*/

private boolean checkPlayServices() {

int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

if (resultCode != ConnectionResult.SUCCESS) {

if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {

GooglePlayServicesUtil.getErrorDialog(resultCode, this,

PLAY_SERVICES_RESOLUTION_REQUEST).show();

} else {

Log.i(TAG, "This device is not supported.");

finish();

}

return false;

}

return true;

}

/**

* Stores the registration ID and the app versionCode in the application's

* {@code SharedPreferences}.

*

* @param context application's context.

* @param regId registration ID

g */

private void storeRegistrationId(Context context, String regId) {

final SharedPreferences prefs = getGcmPreferences(context);

int appVersion = getAppVersion(context);

Log.i(TAG, "Saving regId on app version " + appVersion);

SharedPreferences.Editor editor = prefs.edit();

editor.putString(PROPERTY_REG_ID, regId);

editor.putInt(PROPERTY_APP_VERSION, appVersion);

editor.commit();

}

/**

* Gets the current registration ID for application on GCM service, if there is one.

*


* If result is empty, the app needs to register.

*

* @return registration ID, or empty string if there is no existing

* registration ID.

*/

private String getRegistrationId(Context context) {

final SharedPreferences prefs = getGcmPreferences(context);

String registrationId = prefs.getString(PROPERTY_REG_ID, "");

if (registrationId.isEmpty()) {

Log.i(TAG, "Registration not found.");

return "";

}

// Check if app was updated; if so, it must clear the registration ID

// since the existing regID is not guaranteed to work with the new

// app version.

int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);

int currentVersion = getAppVersion(context);

if (registeredVersion != currentVersion) {

Log.i(TAG, "App version changed.");

return "";

}

return registrationId;

}

/**

* Registers the application with GCM servers asynchronously.

*


* Stores the registration ID and the app versionCode in the application's

* shared preferences.

*/

private void registerInBackground() {

new AsyncTask() {

@Override

protected String doInBackground(Void... params) {

String msg = "";

try {

if (gcm == null) {

gcm = GoogleCloudMessaging.getInstance(context);

}

regid = gcm.register(SENDER_ID);

msg = "Device registered, registration ID=" + regid;

// You should send the registration ID to your server over HTTP, so it

// can use GCM/HTTP or CCS to send messages to your app.

sendRegistrationIdToBackend();

// For this demo: we don't need to send it because the device will send

// upstream messages to a server that echo back the message using the

// 'from' address in the message.

// Persist the regID - no need to register again.

storeRegistrationId(context, regid);

} catch (IOException ex) {

msg = "Error :" + ex.getMessage();

// If there is an error, don't just keep trying to register.

// Require the user to click a button again, or perform

// exponential back-off.

}

return msg;

}

@Override

protected void onPostExecute(String msg) {

mDisplay.append(msg + "\n");

}

}.execute(null, null, null);

}

// Send an upstream message.

public void onClick(final View view) {

/*if (view == findViewById(R.id.send)) {

new AsyncTask() {

@Override

protected String doInBackground(Void... params) {

String msg = "";

try {

Bundle data = new Bundle();

data.putString("my_message", "Hello World");

data.putString("my_action", "com.google.android.gcm.demo.app.ECHO_NOW");

String id = Integer.toString(msgId.incrementAndGet());

gcm.send(SENDER_ID + "@gcm.googleapis.com", id, data);

msg = "Sent message";

} catch (IOException ex) {

msg = "Error :" + ex.getMessage();

}

return msg;

}

@Override

protected void onPostExecute(String msg) {

Toast toast = new Toast(DemoActivity.this);

toast.makeText(DemoActivity.this, msg,Toast.LENGTH_SHORT).show();

}

}.execute(null, null, null);

} else*/

if (view == findViewById(R.id.clear)) {

mDisplay.setText("");

mNotificationAdapter.clear();

Person.deleteAll(Person.class);

Toast toast = new Toast(DemoActivity.this);

toast.makeText(DemoActivity.this,"Cleared All Items",Toast.LENGTH_SHORT).show();

}

}

@Override

protected void onDestroy() {

super.onDestroy();

}

/**

* @return Application's version code from the {@code PackageManager}.

*/

private static int getAppVersion(Context context) {

try {

PackageInfo packageInfo = context.getPackageManager()

.getPackageInfo(context.getPackageName(), 0);

return packageInfo.versionCode;

} catch (NameNotFoundException e) {

// should never happen

throw new RuntimeException("Could not get package name: " + e);

}

}

/**

* @return Application's {@code SharedPreferences}.

*/

private SharedPreferences getGcmPreferences(Context context) {

// This sample app persists the registration ID in shared preferences, but

// how you store the regID in your app is up to you.

return getSharedPreferences(DemoActivity.class.getSimpleName(),

Context.MODE_PRIVATE);

}

/**

* Sends the registration ID to your server over HTTP, so it can use GCM/HTTP or CCS to send

* messages to your app. Not needed for this demo since the device sends upstream messages

* to a server that echoes back the message using the 'from' address in the message.

*/

private void sendRegistrationIdToBackend() {

/* General Post

HttpURLConnection urlConnection = null;

try {

// Construct the URL for the OpenWeatherMap query

String urlStr = "http://videosurv-906.appspot.com/register";

Uri builtUri = Uri.parse(urlStr).buildUpon().build();

URL url = new URL(builtUri.toString());

urlConnection = (HttpURLConnection) url.openConnection();

urlConnection.setRequestMethod("POST");

urlConnection.setRequestProperty("id", regid);

urlConnection.connect();

Log.i("RegistrationIdToBackend", "Registered");

}catch (Exception e){

Log.e("RegistrationIdToBackend", "Error ", e);

}finally {

if (urlConnection != null) {

urlConnection.disconnect();

}

}

*/

String urlStr = "http://videosurv-906.appspot.com/register";

HttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(urlStr);

List urlParameters = new ArrayList();

urlParameters.add(new BasicNameValuePair("id", regid));

try{

post.setEntity(new UrlEncodedFormEntity(urlParameters));

HttpResponse response = client.execute(post);

System.out.println("\nSending 'POST' request to URL : " + urlStr);

System.out.println("Post parameters : " + post.getEntity());

System.out.println("Response Code : " +

response.getStatusLine().getStatusCode());

}catch (Exception e){

Log.e("RegistrationIdToBackend","Error",e);

}

}

}

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

// Explicitly specify that GcmIntentService will handle the intent.

ComponentName comp = new ComponentName(context.getPackageName(),

GcmIntentService.class.getName());

// Start the service, keeping the device awake while it is launching.

startWakefulService(context, (intent.setComponent(comp)));

setResultCode(Activity.RESULT_OK);

}

}

public class GcmIntentService extends IntentService {

public static final int NOTIFICATION_ID = 1;

private NotificationManager mNotificationManager;

NotificationCompat.Builder builder;

public GcmIntentService() {

super("GcmIntentService");

}

public static final String TAG = "GCM Video Surveillance";

@Override

protected void onHandleIntent(Intent intent) {

Bundle extras = intent.getExtras();

GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

// The getMessageType() intent parameter must be the intent you received

// in your BroadcastReceiver.

String messageType = gcm.getMessageType(intent);

if (!extras.isEmpty()) { // has effect of unparcelling Bundle

/*

* Filter messages based on message type. Since it is likely that GCM will be

* extended in the future with new message types, just ignore any message types you're

* not interested in, or that you don't recognize.

*/

if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {

sendNotification("Send error: " + extras.toString());

} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {

sendNotification("Deleted messages on server: " + extras.toString());

// If it's a regular GCM message, do some work.

} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {

// This loop represents the service doing some work.

/* for (int i = 0; i < 5; i++) {

Log.i(TAG, "Working... " + (i + 1)

+ "/5 @ " + SystemClock.elapsedRealtime());

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

}

}*/

Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());

// Post notification of received message.

sendNotification("Received: " + extras.getString("name"));

Log.i(TAG, "Received name : "+ extras.getString("name"));

// Adding time to the Notification

String time;

Calendar c= Calendar.getInstance();

SimpleDateFormat shortenedDateFormat = new SimpleDateFormat("EEEE HH:mm:ss dd-MM-yyyy");

time= shortenedDateFormat.format(c.getTime());

Person person = new Person(extras.getString("name"), time);

person.save();

Log.i(TAG, "Received: " + extras.toString());

}

}

// Release the wake lock provided by the WakefulBroadcastReceiver.

GcmBroadcastReceiver.completeWakefulIntent(intent);

}

// Put the message into a notification and post it.

// This is just one simple example of what you might choose to do with

// a GCM message.

private void sendNotification(String msg) {

mNotificationManager = (NotificationManager)

this.getSystemService(Context.NOTIFICATION_SERVICE);

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,

new Intent(this, DemoActivity.class), 0);

NotificationCompat.Builder mBuilder =

new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.ic_stat_gcm)

.setContentTitle("GCM Notification")

.setStyle(new NotificationCompat.BigTextStyle()

.bigText(msg))

.setContentText(msg);

mBuilder.setContentIntent(contentIntent);

mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

}

}
1   2   3   4   5   6


написать администратору сайта