Nar Gar
Nar Gar

Reputation: 2591

How to restrict android app to specific device make?

I am developing an android app for SPECIFIC brand of phones - that's the project requirement not my decision.

So I need to be able to make the app available in the android marketplace only to those devices that are produced by that SPECIFIC manufacturer.

I don't seem to be able to find how to do that.

Is it possible?

P.S. I can retrieve the device make in the android code. So I suspect that the market app should be able to filter by the device make as well. I just don't know if it actually does (would be great if it does).

Upvotes: 26

Views: 33701

Answers (9)

Pierre-Alban DEWITTE
Pierre-Alban DEWITTE

Reputation: 108

As the Google Play console design as evolved, I did not succeed to make the previous work. I notice that only the first checkbox state was modified. It seems that every click makes a POST to google server. After some attempts, I found that adding a tempo allows to loop on checkboxes. Here is the Javascript that works for me. Just copy paste in the console of your browser (tested with CHROME and FIREFOX). Note that you will have to replace "Next page" in the querySelector of next page button if your loan is not English.

function uncheckAll() {
    const cbxSelector= 'input[type=checkbox]:checked:enabled'
    let checkBoxes = document.querySelectorAll(cbxSelector)
    if (checkBoxes.length > 0) {
        checkBoxes[0].click();
        setTimeout(uncheckAll, 20);
    }else{
      let nextPage = document.querySelector('button[aria-label="Next page"]:enabled');
      if(nextPage){
        nextPage.click();
        setTimeout(uncheckAll, 20);
      }
    }
}

uncheckAll();

If you are willing to check all the check-boxes just replace 'input[type=checkbox]:checked:enabled' with 'input[type=checkbox]:checked:disabled'

Upvotes: 0

Kannappan
Kannappan

Reputation: 11

For check/Uncheck all checkbox in the supported device page in Google play console, use the below script.This script is working fine for latest Google play console. Just copy paste in the console of your browser(tested with CHROME and FIREFOX).

function runScript() {
    for (var bxs = document.getElementsByTagName("input"), j = bxs.length; j--;){
        if (bxs[j].type == "checkbox"){
            bxs[j].click();
        }

    }
    let nextPage = document.querySelector('button[aria-label="Next page"]:enabled');
               if(nextPage){
                 nextPage.click();
                 console.log("next page start");
                 setTimeout(runScript, 20);
               }

}

runScript();

Upvotes: 0

RSchmitt
RSchmitt

Reputation: 141

I have written a little script using different part from answers on this page (thanks @Desty and @MichaelDePhillips). The script is quick (between 100 and 200ms on my computer) and you can specify a brand to not switch. Here is the script :

console.time('Execution time');
var manufacturers = document.querySelectorAll('[data-manufacturer-group]');

for (var i = 0; i < manufacturers.length; i++) {
    var manufacturer = manufacturers[i];
    var brand = manufacturer.firstElementChild;

    if (brand.tagName == 'H3' && brand.textContent != 'Samsung') {
        console.log(brand.textContent);
        var tags = manufacturer.children;

        for (var j=0;j<tags.length;j++) {
            var tag = tags[j];
            if (tag.tagName == 'OL') {
                var devices = tag.children;
                for (var k=0;k<devices.length;k++) {
                    var device = devices[k];
                    if (device.tagName == 'LI') {
                        var checkbox = device.firstElementChild;
                        var attr = checkbox.getAttribute;
                        if (checkbox.tagName == 'CHECKBOX') {
                            checkbox.setAttribute('aria-checked', 'true');
                        }
                    }
                }
            }
        }
    } 
}
console.timeEnd('Execution time');

This is my first javascript, all feedbacks are welcome.

Upvotes: 2

KrisWebDev
KrisWebDev

Reputation: 9492

Below is an improvement of Desty answer with:

  • Auto-detection of class name
  • Really unchecks: works even if you already have some boxes unchecked

Code:

var className = document.evaluate( 'string(//li[@data-device-id]/checkbox/@class)', document, null, XPathResult.STRING_TYPE, null ).stringValue;

switches = document.getElementsByClassName(className);
for(var i=0; i < switches.length; i++) {
   if (switches.item(i).getAttribute("aria-checked") == "false") switches[i].click();
}

This script takes about 1 minute to get executed. Run it from your browser Javascript Console.

Upvotes: 19

Diego Belay
Diego Belay

Reputation: 31

I have written a script to disable devices by brand based on the script from KrisWebDev.

You have to locate the <ol> of your chosen brand, edit and add id="sarasa" to it, then run this script to disable all:

var nodes = document.getElementById("sarasa"); for(var i=0; i < nodes.childNodes.length; i++) { if (nodes.childNodes[i].childNodes[0].getAttribute("aria-checked") == "false") { nodes.childNodes[i].childNodes[0].click(); } }

Upvotes: 2

Desty
Desty

Reputation: 1650

In the Supported Devices section of the developer console page, you can view the list of all devices. This loads over 2,000 slider-type checkboxes which are initially set to enabled. Unfortunately there doesn't seem to be a "disable/enable all" option in the interface...

...Instead, I used Firebug's inspector tool to get the classname for these slider objects (can't recall what it was now - two random uppercase acronyms), then executed an expression in the Javascript console which toggled the state of every slider. Something like:

switches = document.getElementsByClassName("ABC DEF"); for(i = 0; i < switches.length; i++) switches[i].click();

This froze the browser for a minute or two, but afterwards, every phone was marked as unsupported. Then you can enable the phone(s) you need to support.

Upvotes: 30

Soham
Soham

Reputation: 4960

You don't need to filter your app based on device/manufacturer in the application code, instead you can do it from the android market developer console - https://market.android.com/publish/ just when you publish the app itself.

There is a 'Supported Devices' section on the developer console, which shows you a list of all the devices which can access the android market. You can then filter out devices or manufacturers that are not compatible with your app

This is the section in the main developer console:

This is the section in the main developer console

Here you can exclude devices and/or manufacturers from being able to see your app

Here you can exclude devices and/or manufacturers from being able to see your app

For more information please refer to the Device Availability help page which says:

The Device Availability dialog can help developers in two powerful ways:

Understand which devices can find your app in Android Market

  1. Device Availability provides a dynamic list of compatible devices based upon your manifest settings. For example, if your apk’s manifest specifies a large screen size, the console will reflect the supported devices that can find your app in Market.

  2. You can also use the dynamic search feature to see the devices that your application will not be available to. You can search by manufacturer, the design name (E.g. “Passion”), or the actual public device name (E.g. "Nexus One"), to see if your manifest settings filtered a device. Filter problematic or non-compatible devices This feature provides a device-specific administration option to developers. When you add a device to the “Manually Excluded Devices” list, your app will not be available to that excluded device in Market. This is primarily intended to help developers provide the best user experience possible, by helping developers filter out devices known to have compatibility problems.

Upvotes: 32

Maneesh
Maneesh

Reputation: 6128

when you are going to upload a application to market, on publishing page you will have available devices option where you can add/delete devices. By this way you can filter out devices by manufacture and model name.

Upvotes: 0

Lucifer
Lucifer

Reputation: 29632

Well you can do it a logical way.

First the hardware details using getResources().getConfiguration() . Now you can give condition if your hardware is of this mdel Or name then go on.

Upvotes: 2

Related Questions