Listing apps - Android Software Development

A friend of mine is stuck in the app we're doing, and he's getting certain trouble:
Code:
//This lists installed apps
final ListView list1 = (ListView) findViewById(R.id.list1);
ArrayList results = new ArrayList();
PackageManager pm = this.getPackageManager();
Intent inte = new Intent(Intent.ACTION_MAIN, null);
inte.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> list = pm.queryIntentActivities(inte, PackageManager.PERMISSION_GRANTED);
for (ResolveInfo rInfo : list) {
results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm).toString());
}
list1.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, results));
His questions are: How I can do that instead of showing the icons name? If he tries
Code:
results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm).toString());
it shows "[email protected]"
And how could one run the application by clicking on the list?
Thanks in advance!

Not really sure why you're doing it that way but should be easier like this:
Code:
PackageManager pkgMgr = getPackageManager();
List< ApplicationInfo > list = pkgMgr.getInstalledApplications(0);
int len = list.size();
for (int index=0; index < len; index++)
{
ApplicationInfo content = list.get( index );
String pName = content.packageName;
String appLabel = pkgMgr.getApplicationLabel( content );
Drawable icon = pkgMgr.getApplicationIcon( content );
//do whatever you need with properties/icons to here
}

Related

Best way to get a list of installed apps?

I have the following code
Code:
PackageManager packageManager = getPackageManager();
List<PackageInfo> packs = packageManager.getInstalledPackages(0);
for (int i=0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
ApplicationInfo a = p.applicationInfo;
if ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
continue;
}
// Do something here
}
This seems to work, but versonName for Moboplayer returns an empty string even though the installed version is 1.2. Why is that? It does have a version on Market
Code is taken from http://impressive-artworx.de/2011/list-all-installed-apps-in-style/ and http://stackoverflow.com/questions/4598769/list-of-user-installed-apps

List files in data/data/

Code:
if(RootTools.isAccessGiven(){
List<String> SnapList;
File file;
ListView ListView = (ListView) findViewById(R.id.SnapList);
SnapList = new ArrayList<String>();
String directory = "/data/data/";
file = new File(directory);
File list[] = file.listFiles();
for( int i=0; i< list.length; i++)
{
SnapList.add( list[i].getName() );
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, SnapList);
ListView.setAdapter(adapter);
}
}
I'm trying to list the folders in /data/data in a ListView (SnapList) but this code doesn't work and my logcat in eclipse isn't working.
Can anyone shed some light? Thanks.
Chalky94 said:
Code:
if(RootTools.isAccessGiven()[COLOR="Red"])[/COLOR]{
List<String> SnapList;
File file;
ListView ListView = (ListView) findViewById(R.id.SnapList);
SnapList = new ArrayList<String>();
String directory = "/data/data/";
file = new File(directory);
File list[] = file.listFiles();
for( int i=0; i< list.length; i++)
{
SnapList.add( list[i].getName() );
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, SnapList);
ListView.setAdapter(adapter);
}
}
I'm trying to list the folders in /data/data in a ListView (SnapList) but this code doesn't work and my logcat in eclipse isn't working.
Can anyone shed some light? Thanks.
Click to expand...
Click to collapse
First of all, a bracket is missing (red one).
You need to do any root action using a Linux shell. You can execute Linux command line things from that.
For your needs this would be:
Code:
su
ls /data/data
You can do that using RootTools. For that, read these instructions: http://code.google.com/p/roottools/wiki/Usage
Then parse the output.

Unable to upload picture when sending as Base64 String

I am trying to send an image to our asp.net webservice from android.Here is my sample code :
// Getting image from Gallery
Code:
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
picturePath = cursor.getString(columnIndex);
cursor.close();
/* BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;*/
thumbnail = (BitmapFactory.decodeFile(picturePath));
img_photo.setImageBitmap(thumbnail);
// converting imag into base64 string
Code:
img_photo.buildDrawingCache();
Bitmap bm = img_photo.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); // bm is the bitmap
byte[] photo = baos.toByteArray();
System.out.println("this is byte array" + bytearray);
String temp_base =Base64.encodeToString(photo,Base64.NO_WRAP);
// calling webservice
Code:
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("CarID", SellCarDetailView.sellcardetails_carid);
request.addProperty("pic",temp_base);
System.out.println("this is piccontent" +temp_base);
try {
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
soapEnvelope.encodingStyle = SoapEnvelope.ENC;
// new MarshalBase64().register(soapEnvelope);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
HttpTransportSE aht = new HttpTransportSE(URL);
//AndroidHttpTransport aht = new AndroidHttpTransport(URL);
aht.call(SOAP_ACTION, soapEnvelope);
// SoapObject response = (SoapObject)envelope.getResponse();
SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
String temp3 = response.toString();
Log.v("TAG", temp3);
} catch (Exception e) {
e.printStackTrace();
}
How ever i am getting "invalid parameter" at web service end.
// Asp.net code
Code:
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Xml)]
[WebMethod(EnableSession = true)]
public string UploadPictureByCarIDFromAndroid(string CarID, string make, string model, string year, string UserID, string pic, string AuthenticationID, string CustomerID, string SessionID)
{
string bStatus = "Failed";
MobileBL objMobile = new MobileBL();
UsedCarsInfo objCarPicInfo = new UsedCarsInfo();
try
{
try
{
if (AuthenticationID == ConfigurationManager.AppSettings["AppleID"].ToString())
{
objCarPicInfo.Carid = Convert.ToInt32(CarID);
byte[] picContent = Convert.FromBase64String(pic);
// byte[] picContent = Base64.decode(pic);
MemoryStream ms = new MemoryStream(picContent, 0,picContent.Length); // getting "invalid length"
ms.Write(picContent, 0, picContent.Length);
Bitmap oBitmap1 = new Bitmap(ms);// getting "invalid length" error here
// System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
}
}
catch (Exception ex)
{
}
}
catch (Exception ex)
{
}
return bStatus;
}
I am getting "invalid length" error when sending the image.Any help is highly appreciated.
i think a better approach is with stream rather file path
for example you can try
Get image from gallery
Code:
Uri selectedImage = data.getData();
BitmapFactory.Options options = new BitmapFactory.Options();
//your options
Bitmap img_photo = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, options);
convert to base64
Code:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
img_photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
String temp_base =Base64.encodeToString(byteArray,Base64.DEFAULT);
i cant see anything wrong in the web services call but shouldn't you send all the parameters the function needs?
also, try to change this
Code:
// SoapObject response = (SoapObject)envelope.getResponse();
SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
String temp3 = response.toString();
to this
Code:
SoapObject response = (SoapObject)envelope.getResponse();
String temp3 = response.getProperty(0).toString();
warlock9_0 said:
i think a better approach is with stream rather file path
for example you can try
Get image from gallery
Code:
Uri selectedImage = data.getData();
BitmapFactory.Options options = new BitmapFactory.Options();
//your options
Bitmap img_photo = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, options);
convert to base64
Code:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
img_photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
String temp_base =Base64.encodeToString(byteArray,Base64.DEFAULT);
i cant see anything wrong in the web services call but shouldn't you send all the parameters the function needs?
also, try to change this
Code:
// SoapObject response = (SoapObject)envelope.getResponse();
SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
String temp3 = response.toString();
to this
Code:
SoapObject response = (SoapObject)envelope.getResponse();
String temp3 = response.getProperty(0).toString();
Click to expand...
Click to collapse
Thanks for giving reply, i tried your code but getting the same problem.
sending to web service is ok?
trying this in the web service end?
Code:
Bitmap bmpReturn = null;
byte[] byteBuffer = Convert.FromBase64String(base64String);
MemoryStream memoryStream = new MemoryStream(byteBuffer);
memoryStream.Position = 0;
bmpReturn = (Bitmap)Bitmap.FromStream(memoryStream);
memoryStream.Close();
memoryStream = null;
byteBuffer = null;

[Q] Populate database in android 4.4 using phonegap?

I can't populate database in android 4.4 using phonegap when I run my app the first time, but if I close the app and open it again this task works fine.
I have a 0000000000000001.db in assets and I want put this in Android 4.4 memory.
How can I deal with such Issue?
I'm using this code to populate the database in Android 4.4 memory
Code:
public void copyDatabase(){
// DB_NAME2 = "Databases.db";
//ASSETS = "0000000000000001.db";
//DB_PATH2 = "/data/data/com.example.testapp/app_webview/databases/";
//DB_PATH3 = "/data/data/com.example.testapp/app_webview/databases/file__0/";
//DB_NAME3 = "1";
String path = DB_PATH2 + DB_NAME2;
String path2 = DB_PATH3 + DB_NAME3;
File checkDatabase = new File(DB_PATH2);
File checkDatabase2 = new File(DB_PATH3);
if (!checkDatabase.exists())
{
checkDatabase.mkdir();
}
if (!checkDatabase2.exists())
{
checkDatabase2.mkdir();
}
try{
InputStream is = context.getAssets().open(DB_NAME2);
OutputStream os = new FileOutputStream(path);
InputStream is2 = context.getAssets().open(ASSETS);
OutputStream os2 = new FileOutputStream(path2);
byte[] buffer = new byte[10240];
int line;
while ((line = is.read(buffer))>0)
{
os.write(buffer, 0, line);
}
os.flush();
os.close();
is.close();
buffer = new byte[10240];
line = 0;
while ((line = is2.read(buffer))>0)
{
os2.write(buffer, 0, line);
}
os2.flush();
os2.close();
is2.close();
}catch(IOException e){
System.out.println("Problem "+e);
}
}

My JSONArray keeps appending the last object on loop

Here is my code:
Code:
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
JSONObject jObject = new JSONObject(jsonObj.toString().trim());
Iterator<?> keys = jObject.keys();
JSONArray temp_json_arr = null;
JSONObject temp_json_obj = null;
String temp_string = "";
int index_count = 0;
LinearLayout ll = (LinearLayout)findViewById(R.id.test_layout);
//temp_json_obj = jsonObj.getJSONObject("identification");
//Log.d("TEST: ", "ARRAY LENGTH> "+temp_json_arr.length());
while( keys.hasNext() ){
String key = (String)keys.next();
Log.d("TEST: ", "KEYS> " + key);
// Getting JSON Array node
temp_json_arr = jsonObj.getJSONArray(key);
// looping through All Questions
for (int i = 0; i < temp_json_arr.length(); i++) {
JSONObject q = temp_json_arr.getJSONObject(i);
if( key.equals("identification") ) {
tv[tv_ctr] = new TextView(getApplicationContext());
tv[tv_ctr] = (TextView)findViewById(id);
id++;
et[identification_question] = new EditText(getApplicationContext());
et[identification_question] = (EditText)findViewById(id);
id++;
//json manipulation
try {
jsonOb.put("question-id", tv[tv_ctr].getText().toString());
jsonOb.put("answer", et[identification_question].getText().toString());
} catch(Exception e) {
}
Log.d("TEST: ", "jsonOb> " + jsonOb.toString());
//answer += et[identification_question].getText().toString() + "-" + tv[tv_ctr].getText().toString() + "/";
tv_ctr++;
identification_question++;
jsonArr.put(test,jsonOb);
test++;
Log.d("TEST: ", "jsonArr> " + jsonArr.toString());
}
Everytime I use .put of the JSONArray, it appends the last object on all indexes for example:
I have 3 input namely answer 1 , answer 2 and answer 3
The expected json data will be this:
Code:
[{"answer":"answer1","question-id":"question1"},{"answer":"answer2","question-id":"question2"},{"answer":"answer3","question-id":"question3"}]
But this is the current output:
Code:
[{"answer":"answer3","question-id":"question3"},{"answer":"answer3","question-id":"question3"},{"answer":"answer3","question-id":"question3"}]
As you can see the last index get appended multiple times.
Nevermind I've already solved my own problem.

Categories

Resources